PPCEye API

Five read-only endpoints that bring advertiser data, landing-domain networks and brand-bidding detection into your own systems. Every endpoint below ships with a real sample response — no key needed to see exactly what you get back.

Quick start

Base URL https://ppceye.com. Everything is GET and returns JSON. Create a key on your account page — the plaintext is shown once, and your first key comes with 200 free credits, enough to exercise all five endpoints.

Authenticate with either header:

curl "https://ppceye.com/api/v1/advertiser?name=Dealer%20Spike" \
  -H "Authorization: Bearer ppc_xxxxxxxxxxxx"

# equivalent
curl "https://ppceye.com/api/v1/advertiser?name=Dealer%20Spike" \
  -H "x-api-key: ppc_xxxxxxxxxxxx"

Every successful response carries your balance, so you never need a separate call for it:

"credits_charged": 1,
"credits_remaining": 199

Billing

Billed in prepaid credits — one-time purchase, never expire, no subscription. Credits are deducted before the query runs; an insufficient balance returns 402 and costs nothing. Pack prices are on the pricing page.

EndpointCredits / call
/api/v1/advertiser, /api/v1/domain3
/api/v1/advertiser/history9
/api/v1/advertiser/domains15
/api/v1/brandbid60

Endpoints

GET/api/v1/advertiser3 credits

Advertiser summary. Google issues one company several advertiser IDs; this endpoint merges them by name before aggregating.

ParameterNotes
name (required)Advertiser name, case-sensitive, same as on the site
{
  "advertiser": "Dealer Spike",
  "advertiser_ids": [
    "AR05738027791505424385", "AR08139894827664801793",
    "AR09607180450548154369", "AR11199105612044566529",
    "AR15781632204146212865"
  ],
  "creatives": 16313,
  "landing_domains": 1854,
  "last_seen": "2026-09-16",
  "country": "US",
  "advertiser_type": null,
  "credits_charged": 1,
  "credits_remaining": 199
}

advertiser_type is "agency", "direct" or null. It is a manual label, so null means nobody has classified this advertiser yet — not that it is not an agency. There is no time dimension here; use /advertiser/history for that.

GET/api/v1/domain3 credits

Domain summary: how many advertisers are running ads that land on this domain.

ParameterNotes
domain (required)Root domain; normalized for you (www., scheme and path are stripped)
{
  "domain": "dmit.io",
  "advertisers": 8,
  "last_crawled": "2026-08-22 11:25:38",
  "has_data": true,
  "credits_charged": 1,
  "credits_remaining": 198
}
GET/api/v1/advertiser/history9 credits

Month-by-month activity, which tells you whether an advertiser is scaling up or winding down.

ParameterNotes
name (required)Advertiser name
{
  "advertiser": "Dealer Spike",
  "window_start": "2023-09-18",
  "months": [
    { "month": "2026-06", "creatives": 1876, "domains":  588 },
    { "month": "2026-07", "creatives": 1304, "domains":  404 },
    { "month": "2026-08", "creatives":  792, "domains":  264 },
    { "month": "2026-09", "creatives": 9819, "domains": 1430 }
  ],
  "credits_charged": 3,
  "credits_remaining": 195
}
The window is capped at the most recent 36 months (window_start tells you the actual floor), and the sample above shows only the last four entries. The site itself exposes the full six-plus years.
GET/api/v1/advertiser/domains15 credits

Which landing domains this advertiser runs ads to — the core signal separating a brand advertising itself from an agency or affiliate buying for many clients. One or two domains usually means the brand or its dealer; a thousand unrelated ones means an intermediary.

ParameterNotes
name (required)Advertiser name
{
  "advertiser": "Dealer Spike",
  "landing_domain_count": 1854,
  "landing_domains": [
    { "domain": "ronhooverrvs.com",        "creatives": 853, "last_seen": "2026-09-16" },
    { "domain": "meyersrvsuperstores.com", "creatives": 837, "last_seen": "2026-09-16" },
    { "domain": "rvstation.com",           "creatives": 580, "last_seen": "2026-09-16" },
    { "domain": "mikethompson.com",        "creatives": 129, "last_seen": "2026-09-16" }
  ],
  "truncated": true,
  "credits_charged": 5,
  "credits_remaining": 190
}

landing_domain_count is the full total; landing_domains returns at most 500 entries, ordered by creative count. truncated flags the difference. The sample keeps the first 4.

GET/api/v1/brandbid60 credits

Who is advertising onto your domain, with each advertiser's landing-domain footprint inline.

ParameterNotes
domain (required)Your root domain
{
  "domain": "dmit.io",
  "advertiser_count": 8,
  "advertisers": [
    {
      "advertiser": "罗小加",
      "advertiser_id": "AR17017046509952172033",
      "creatives": 6,
      "first_seen": "2025-12-23",
      "last_seen": "2026-05-28",
      "landing_domain_count": 275,
      "profile": "multi_domain_intermediary"
    },
    {
      "advertiser": "Liu Li",
      "advertiser_id": "AR17818107663557328897",
      "creatives": 5,
      "first_seen": "2026-02-04",
      "last_seen": "2026-05-29",
      "landing_domain_count": 197,
      "profile": "multi_domain_intermediary"
    },
    {
      "advertiser": "Absolute Link Limited",
      "advertiser_id": "AR06785990551779934209",
      "creatives": 4,
      "first_seen": "2026-04-13",
      "last_seen": "2026-09-05",
      "landing_domain_count": 870,
      "profile": "multi_domain_intermediary"
    }
  ],
  "credits_charged": 10,
  "credits_remaining": 180
}

profile is single_domain (1), few_domains (2–4) or multi_domain_intermediary (5+). At most 100 advertisers are returned; the sample keeps the first 3.

profile is descriptive, not a verdict. Whether an ad infringes depends on whether the ad copy uses your trademark, which this endpoint cannot tell you — do not treat it as a conclusion. The evidence workflow is in this guide.

Errors

StatuserrorMeaning
400missing_name / missing_domainRequired parameter empty. No credits charged.
401unauthorizedKey missing, malformed, revoked, or the account is disabled. No credits charged.
402insufficient_creditsBalance too low; the response carries required and balance. No credits charged.
404not_foundNo such advertiser or domain. This one is charged — the lookup ran.

Definitions, refresh cadence and known limits are documented in the data methodology. Questions about the API go to [email protected].