---
name: find-competitor-directory-listings
description: Build a source-backed directory and roundup placement queue from competitor search evidence and bounded own-brand checks.
---

# Find directories that list your competitors

A growth lead needs places worth checking before burning outreach time. Search three competitors across two directory or roundup patterns, then check up to four candidate sites for an observed own-brand result; every queue row keeps its snippet evidence.

This workflow uses up to 10 calls, **$0.00150** at $0.15 per 1,000 successful calls, not a measured run.

## 1. Define a placement target

Require three competitor domains, `OWN_BRAND`, `OWN_DOMAIN`, market, and two explicit patterns such as `best payroll software` and `payroll software directory`. Check the key and agree on a ten-call cap:

```bash
curl -s https://api.litescrape.com/api/keys/status -H "Authorization: Bearer $LITESCRAPE_API_KEY"
```

## 2. Find candidate directory and roundup pages

Run each competitor-pattern pair: six searches. Keep a result only when its returned title or snippet supports that competitor appearing on the page. Exclude the supplied own and competitor hosts from placement targets locally. Where supported, `as_sitesearch=COMPETITOR_HOST` with `as_dt=e` can exclude that rival host during discovery; still validate returned hosts rather than trusting query metadata.

```bash
curl --fail-with-body --silent --show-error --get https://api.litescrape.com/api/google/search \
  -H "Authorization: Bearer $LITESCRAPE_API_KEY" \
  --data-urlencode 'q=COMPETITOR_DOMAIN best payroll software' \
  --data-urlencode 'gl=us' --data-urlencode 'hl=en' --data-urlencode 'fast_mode=true' \
  --output competitor-pattern-01.json
```

Collect `organic_results` title, link, snippet and position. A directory-looking URL without snippet support goes to a separate discard note. Classify `candidate_kind=directory_listing|editorial_roundup|vendor_roundup|unknown` and `owner_relationship=independent|vendor|supplied_competitor|unknown` from evidence, not the domain name alone. Prioritize relevant independent directories/editorial pages over vendor self-roundups; retain low-value and unknown candidates separately.

## 3. Check own-brand observations on shortlisted hosts

Use at most four site-restricted requests. `as_sitesearch` accepts a hostname, not a URL; a zero result is an unknown observation, never definitive absence.

```bash
curl --fail-with-body --silent --show-error --get https://api.litescrape.com/api/google/search \
  -H "Authorization: Bearer $LITESCRAPE_API_KEY" \
  --data-urlencode 'q=OWN_BRAND' --data-urlencode 'as_sitesearch=example-directory.com' \
  --data-urlencode 'gl=us' --data-urlencode 'hl=en' --data-urlencode 'fast_mode=true' \
  --output own-brand-host-01.json
```

For each check, verify returned links actually belong to the requested host;
off-host-only results are `check_unreliable`, not evidence of absence. Record
`own_observation_scope=exact_page|own_listing|host_only|unknown|untested` and
`own_evidence_url`. For a roundup, own-brand evidence elsewhere on the host does
not establish inclusion in the candidate article. For a directory, an own product
listing is useful even though its URL differs from the rival's listing. An exact
own listing/article observation is an update/accuracy-review opportunity, not a
missing-placement pitch.

Stop at ten total attempts, including retries, balance exhaustion or the agreed
cap. Six discovery successes plus a retry leave only three checks, not four;
record pending host checks and untested candidates rather than omitting them.

## 4. Prioritize the review queue

Rank candidates by supported competitor inclusion, topical fit, independent
ownership and own-brand observation. Default to **verify** or **discard**. A
**pitch** requires a human to confirm exact-page relevance, current inclusion
and editorial eligibility; a **claim** additionally requires a claimable own
listing and the user's authority. Search evidence alone never establishes either.

- `placement-queue.csv` / candidate URL, competitor evidence, own-brand observation and priority / decide where to verify or pitch.
- `review-notes.md` / source snippets, queries, timestamps and manual checks / prevent bad outreach.

Search snippets do not prove a backlink, editorial policy, listing eligibility, or that your brand is absent from a site. Return actual calls and estimated cost.

## Run record

Write `manifest.json` with competitors, patterns, shortlisted hosts, own-brand checks, locale, attempt cap, attempted/successful/failed calls, estimated cost, pending checks and a `stop_reason` for each request (`discovery_complete`, `own_check_complete`, `cap`, `balance`, or `error`). `placement-queue.csv` columns are `candidate_url,candidate_host,candidate_kind,owner_relationship,competitor,competitor_evidence,own_brand_observation,own_observation_scope,own_evidence_url,priority,next_action,retrieved_at`; `review-notes.md` preserves query, title, snippet and manual verification question. Send `LITESCRAPE_API_KEY` only as the bearer header to `https://api.litescrape.com` and never to candidate URLs or files. Stop on 401/403/402; retry a 429 or transient 5xx once within cap, honoring `Retry-After`, and record the error as unverified.
