The Journal Brooklyn, NY Aug 30, 2026
● Local AI Search Check · Free · Two-minute form
SIGNAL/AI
← The Journal
Playbook · Citations

Reverse Engineer a Competitor's Citation Surface Without Paid Tools

You don't need a paid citation platform to understand why an AI engine names a competitor and not you. A browser, Google's free tools and the engines themselves will show you which prompts cite them, which sources name them and what structured data they publish. You can work through all of it in an afternoon.

The examples below use a placeholder, Example Optical, an optometry practice in Crown Heights. Swap in the business that keeps getting named instead of you.

Start With the Prompt They Win

Open ChatGPT and Perplexity and ask the question your customers would ask: "Who's the best optometrist in Crown Heights?" or "Where can I get an eye exam in Crown Heights?" Note whether the competitor is named, where it appears in the list, and which sources the engine cites alongside it.

Then vary the wording four or five times: "eye doctor near Crown Heights", "optometrist that takes walk-ins in Crown Heights", "contact lens exam Brooklyn". Run the same phrases on Google and look at the pages behind the first results. Some sources will come up again and again. Those are the citation anchors in your category. Write them down.

If the competitor is quoted, copy the exact sentence the engine used. That tells you which piece of their content was easy to lift, and why.

Pull Their Schema From the Page Source

Open the competitor's homepage, right-click and choose View Page Source (Ctrl+U on Windows, Cmd+U on Mac). Press Ctrl+F and search for application/ld+json. The browser jumps to the first structured-data block. Keep pressing Enter to move through the rest; many sites layer LocalBusiness, Organization, FAQPage and Person markup on one page.

A typical block looks like this:

{
  "@context": "https://schema.org",
  "@type": "MedicalBusiness",
  "name": "Example Optical",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Example Avenue",
    "addressLocality": "Brooklyn",
    "addressRegion": "NY",
    "postalCode": "11216"
  },
  "telephone": "+1-718-555-0100",
  "url": "https://www.example.com"
}

Check for:

  • name, address, telephone, url and image
  • areaServed, which shows whether they target specific neighborhoods
  • openingHoursSpecification
  • sameAs, the links that tie the business to its profiles elsewhere

Empty fields matter as much as filled ones. Do the same on their main service pages: are they using Service or FAQPage markup?

Make the Block Readable

Copy the whole block and paste it into a JSON formatter such as JSONLint. The formatter checks the syntax, lays out nested objects such as the address, and flags a missing comma or quote. If their JSON is broken, no engine can parse it, and that alone can explain why a well-designed site isn't getting cited.

Check Their Markup in the Rich Results Test

Paste the competitor's URL into Google's Rich Results Test. It lists every structured-data item Google detected, flags errors and missing fields, and shows which Google features the markup is eligible for. Eligible is not the same as shown in search: the test proves the markup qualifies, nothing more.

Take a screenshot and note which types passed and which failed. A business whose FAQPage passes but whose LocalBusiness has errors has invested in answers, not in its location data. For what the test can and can't tell you, see how to audit your structured data.

Read Their Google Business Profile

Search their business name on Google or Google Maps and open the business profile. You don't need their login. Look at:

  • the categories they chose
  • the description, and the words in it
  • the website link, and which page it points to
  • "People also search for", which shows the businesses Google considers neighbors

This takes three minutes and tells you what Google believes they are.

Find Who Names Them

Search the business name in quotes, then add one site at a time:

  • "Example Optical" site:yelp.com
  • "Example Optical" site:healthgrades.com
  • "Example Optical" site:zocdoc.com
  • "Example Optical" site:instagram.com

Record every page that names them and what kind of page it is: review site, directory, news mention, social profile. The mix shows where their authority comes from, and it should overlap with the citation anchors you wrote down in the first step.

Check Their Blog

If they publish, open the blog and scan titles and dates. How often do they post? Do they write neighborhood guides, service explainers or patient questions? Open the three most recent posts, view the source again and look for BlogPosting markup with an author and a datePublished. That shows how much they invest in content an engine can retrieve.

Map Their Neighborhood Footprint

Search the business name with each neighborhood you both serve: "Example Optical" Prospect Heights, "Example Optical" Flatbush. Note which come back. Then compare it with the areaServed you found in their markup. Do they have a page for each neighborhood they claim, or one homepage trying to cover all of them? A focused page per neighborhood gives an engine something specific to match; a single page that lists five areas gives it much less. For how engines treat neighborhoods, see why AI search answers at neighborhood resolution.

Record What You Find

Put it in one table, one row per element:

Element Their approach Yours Action
Primary schema type MedicalBusiness LocalBusiness only Use the specific subtype
Address and phone in markup Complete Street only Complete PostalAddress
Opening hours in markup Mon to Sat Missing Add openingHoursSpecification
FAQ markup Yes, on service pages No Build an FAQ section
areaServed Three named neighborhoods Missing Name the areas you serve
Sources that name them Yelp, Healthgrades, Zocdoc Google Maps only Claim and complete those profiles
Blog cadence Weekly Monthly Publish more often
Named by ChatGPT for your prompt Yes No Fix the gaps above, then ask again

This table is your audit. It shows what they have built that you haven't.

Why This Matters

You don't need to copy a competitor move for move. You need to understand the logic. When a competitor is named in ChatGPT and you aren't, the reason is rarely that they are better at the job. It is usually that they have published something an engine can extract and trust: structured data, consistent details across directories, steady content and pages that match the neighborhoods people ask about. In generative engine optimization, that surface is the work.

Start with their schema. Pull it, understand it, then audit your own markup against it. The gap you find is your roadmap.

Get your free AI check

§ Get cited

When Brooklyn asks AI,
does it find you?

Free AI search check. Send a two-minute form; I check your Schema.org markup and AI citation status and reply in writing within one business day with exactly what's missing.

Get your free AI check →