Prompt Kits

Build a Competitor Tracker

Most small businesses track competitors the same way: a browser tab left open for three weeks, a screenshot of someone's price page, and a strong feeling that the place down the road put its prices up. None of that accumulates, so the one question that actually matters — what changed since I last looked — can never be answered. This kit builds a private app that holds your competitors, what they charge, what they promise, and a dated record of what you noticed, and then uses all of it to answer a question about your own positioning. The last step adds a scheduled check that looks for changes and emails you, which is the point at which the thing starts working while you don't. It is a back-office tool: nobody but you ever opens it. It is not part of your website, and it should not be.

Project type: Competitor tracker Difficulty: Beginner Time: 1 day Works with: Base44 / Lovable / v0

What you'll have at the end

  • One record per competitor, with what they sell and what they charge, in fields you can compare rather than paragraphs you have to re-read
  • A dated log of what changed — the thing a folder of screenshots can never give you
  • A side-by-side view of where you sit on price against the people you actually lose work to
  • A positioning answer drawn from your own stored material, not from a generic prompt: where you are cheaper, where you are dearer, and what you say about it
  • An optional weekly check that visits the pages you nominate, tells you what moved, and emails you a short digest
  • Everything exportable, so nothing you record is trapped

Before you start

  • The private app from Build Your Own Back Office. This kit adds to that app rather than starting a new one. All back-office modules belong in one app — that is the whole point of the category, since each module is worth more when it can read what the others hold.
  • A list of who you actually compete with. Between three and eight. This is the real work of the kit, and step 1 spends itself on getting it right, because a list of the twenty biggest names in your industry is a list of people you will never take a customer from.
  • Their public pages. Prices, services, about. Public pages only — what a customer could see by visiting. If it is behind a login, it is not yours to collect.
  • Your own prices, written down. The comparison is worthless without your side of it. If you built the quote calculator, you already have this.
  • An email address for the digest, if you do step 5.
  • A paid Base44 plan, if the app is to be genuinely private. Private apps — sign-in required, invite-only — are a paid feature. Worth knowing before you put competitor notes into it.

Which platform suits this

Base44 is the right fit for all five steps and the only one of the three that carries the last step comfortably: entities for competitors and observations, a private app, backend functions that can fetch an external page, scheduled workflows, and built-in email — the whole chain in one place. Lovable builds steps 1 to 4 well through Lovable Cloud or Supabase, and step 5 is possible but you assemble the scheduler, the fetch and the email provider yourself. v0 will build the screens and the data model, and you choose and secure the database, the cron and the mail provider — reasonable if you are comfortable with that and want the code, heavier than the job deserves if you are not.

Honest note on step 5 across all three: fetching a page on a schedule is easy; deciding what counts as a change worth telling you about is the hard part, and it is an assumption to test rather than a solved problem. Step 5 is written accordingly.

Continue in the back-office app you already built. New to this? Start with the back-office guide.

The steps

1

Decide who you are actually competing with

When to use this

First, inside the private app you built from the back-office starter prompt.

Between three and eight competitor records, each with a reason it is on the list.

The prompt

Add a competitor tracking section to this private internal app.

Create an entity called "Competitor" with these fields: name; website URL; what they sell, in one line; who they serve; location or service area; the reason I consider them a competitor, as long-form text; a "threat level" I choose from high, medium or watch-only; date added; and an "active" flag so I can retire one without deleting its history.

Build a page listing all competitors, sorted by threat level then name, showing name, what they sell, threat level and when I last recorded anything about them. Add a form to create and edit one.

Two things I want the form to push me on, because this is where a list like this usually goes wrong:
- The "reason" field is required. If I cannot say why someone is a competitor, they are not one.
- Show a warning, not a block, once I have more than eight active competitors: "A list this long usually means you are tracking your industry rather than your competitors."

Do not fetch anything from the internet in this step and do not pre-fill any competitor for me. I will enter them myself.

Check it worked

An empty competitor list you can add to, which nags you gently for a reason and warns you when the list grows past the point of being useful.

You'll know it worked when:

The Competitor entity and its list and form screens.

Watch out for

The temptation is to list the biggest names in your field. Those are rarely who you lose a specific customer to. The honest test for each one: has a real customer ever chosen them instead of me, or seriously considered it? If not, they are watch-only at most.

2

Record what they charge and what they promise

When to use this

Once the list exists and you have their public pages open.

Structured, comparable pricing — not pasted paragraphs.

The prompt

Add pricing and offer tracking to the Competitor section.

Create an entity called "Offer" linked to a Competitor, with: offer name; price; price unit (choose from per hour, per job, per month, per person, per item, from-price, or not published); what is included, as long-form text; what is explicitly excluded; any minimum; the URL the price came from; the date I recorded it; and a "still current" flag.

A competitor can have several offers. On the competitor's page, list their offers with the date each was recorded.

Build a comparison page showing all competitors' offers side by side, grouped by price unit so I am not comparing an hourly rate to a monthly one. Let me add my own prices as a special entry marked "us" so I appear in the comparison.

Important: "not published" is a real and common answer, and I want it recorded as a finding rather than left blank — a competitor who hides pricing is telling me something. When the price unit is "not published", let me record what they say instead, for example "call for a quote".

Do not estimate, infer or guess any price. Only store what I enter.

Check it worked

A comparison you can read in one glance, with your own prices in it, and with hidden pricing recorded as a fact rather than a gap.

You'll know it worked when:

The Offer entity, the per-competitor offer list, and the comparison view.

Watch out for

Comparing a headline price to your all-in price flatters them and depresses you. Record what is included and excluded, or the comparison quietly lies to you. And date every price — an undated price is a rumour within three months.

3

Log what you notice, when you notice it

When to use this

After the comparison exists. This is the step that makes the tracker accumulate rather than sit still.

A dated, append-only record of observations.

The prompt

Add an observation log to the Competitor section.

Create an entity called "Observation" linked to a Competitor, with: date, defaulting to today; type, chosen from price change, new service, dropped service, marketing change, review or reputation, hiring, closure, or other; what I observed, as long-form text; where I saw it, as free text or a URL; and "what I think it means", as a separate long-form field.

Keep "what I observed" and "what I think it means" as two distinct fields, and label them clearly. I want to be able to read back what actually happened without my interpretation mixed into it.

Show observations newest first on each competitor's page, and build a combined timeline page across all competitors with a filter by type and by competitor.

Adding an observation should take one click from anywhere in the competitor section. Observations can be edited and archived but never hard-deleted.

Also add, to the app's existing Log Entry section, the ability to link an entry to a Competitor, so a decision I record there can point at what prompted it.

Check it worked

A timeline that answers "what changed since I last looked", and a link between what a competitor did and what you decided to do about it.

You'll know it worked when:

The Observation entity, per-competitor and combined timelines, and the link from the existing decision log.

Watch out for

The separation of observation from interpretation looks pedantic and is the most valuable thing in this step. Six months on, "they dropped their price to $X on 14 March" is a fact you can build on; "they are panicking" is a mood you had that day.

4

Ask it where you actually stand

When to use this

Once you have a few competitors, their prices and at least a handful of observations.

A positioning answer built from your stored material, not from a blank prompt.

The prompt

Add a positioning page to the competitor section.

It should take everything already stored — my Business Profile, my own prices, every competitor with their offers, and the observation log — and produce a written summary covering: where I sit on price against each competitor for comparable work; what I offer that none of them appear to; what they offer that I do not; and which competitors have moved recently and in which direction.

Rules for how it writes:
- Use only what is stored in this app. Do not add market knowledge, industry statistics or anything from the internet.
- When something is missing — no price recorded, no recent observation — say so plainly instead of filling the gap. "No price recorded for X since January" is a useful sentence.
- Quote my own stored numbers exactly. Do not round or convert them.
- Keep it under 500 words and write it as plain assessment, not marketing copy.

Let me save a generated summary with the date it was made, and keep past ones, so I can see how the picture changed over time.

Show clearly on the page how many competitors, offers and observations the summary was built from, so I can tell at a glance whether it is standing on real material or on three records.

Check it worked

A dated positioning read you can disagree with, that shows its own working and admits what it does not know.

You'll know it worked when:

The positioning page, saved summaries with dates, and the source counts.

Watch out for

Run this on three thin records and it will produce confident nonsense — which is why the step makes it show what it was built from. The honest use is to run it after a real research session, not instead of one.

5

Let it watch while you don't (optional)

When to use this

Last, and only once steps 1 to 4 hold real material. Needs a paid Base44 plan for scheduled workflows.

A weekly check that reports what moved.

The prompt

Add an automated weekly check to the competitor section.

On each Competitor, let me nominate up to three URLs to watch, each with a label such as "pricing page" or "services page". Only pages I nominate — nothing else.

Create a backend function that fetches each nominated URL, extracts its readable text, and compares it to the text stored from the previous check. Store each check with its date, so there is a history.

When the text has changed, have it produce a short plain-language description of what changed — focusing on prices, services added or removed, and claims made — and ignore navigation, cookie banners, dates and other boilerplate that changes without meaning anything.

Run this once a week on a schedule and email me a digest containing only the competitors where something changed, with a one-line description each and a link to the page. If nothing changed anywhere, send nothing.

Give me a manual "check now" button as well, so I can test it without waiting a week.

Every detected change must also appear as a draft Observation linked to that competitor, with type "price change" or "other", which I then confirm or discard. Do not write a confirmed observation automatically — I decide what counts.

Be conservative about frequency: once a week per page, never more, and identify yourself honestly in the request.

Check it worked

A quiet Monday email that only arrives when something actually moved, and draft observations waiting for you to confirm.

You'll know it worked when:

The watch list, the scheduled check with its history, the digest email, and the draft-observation flow.

Watch out for

The thing most likely to disappoint you is noise: pages change constantly for reasons that mean nothing, and how well the summariser filters that is an assumption to test, not a promise. Run it manually for two or three weeks before you trust the schedule. If the digest is mostly noise, cut the watch list to the two pages that genuinely matter rather than tuning the filter. And keep the frequency low — you are reading someone's public page, not testing their servers.

Going live

This one never goes live publicly, so the checklist is about whether you can rely on it.

  • The app is set to Private in its settings, sign-in required, and only you are invited. Check this before the first competitor note goes in, not after.
  • Every competitor has a reason recorded. Any that do not are not competitors.
  • Every price has a date and a source URL.
  • Your own prices are in the comparison, or it is telling you half a story.
  • You have run the export once and opened the file, so you know your material can leave.
  • If you did step 5: you ran it manually at least twice, you looked at what it called a change, and you were willing to believe the result.
  • Nothing in here is anything a customer, or a competitor, would find if they somehow opened it. Notes you would not want read aloud do not belong in a tool you might one day share.

Spend fewer credits

Every builder charges you for the work its AI does — so the cheapest habit is thinking before you build. These six rules cut most of the waste, whichever platform you choose.

  1. Plan in a free chat first. Sketch the whole thing in ChatGPT, Claude or Gemini — pages, features, what each form collects, what it should look like. Thinking there is free; thinking inside a builder is billed.
  2. Start from a written prompt, not a sentence. "Make me a website" is the most expensive sentence in AI building. A complete first prompt — like the ones on this site — saves dozens of correction rounds.
  3. Don't be lazy with the details. Every detail you leave out comes back as a correction you pay for. Business name, colors, every page, every form field, what happens after someone submits — put it all in the first prompt.
  4. One change per message afterwards. "Fix the header, and the form, and the colors" produces a tangle that costs more to unpick than it saved.
  5. Stuck? Stop patching. If the same fix fails about three times, don't send a fourth correction — describe the whole section's desired end state in one fresh message instead.
  6. Start free. Upgrade when you need more. Use the free allowance to build and explore your first version. Upgrade when you need more usage or paid features, and check any connected service costs before launch.

The prompts on this page are written to do most of this work for you — that's the point of them.

Read the full guide

Last reviewed: 2026-09-18

FAQ

We use cookies to analyze traffic and track affiliate clicks. By continuing, you agree to our Privacy Policy.