RankSharkDocs

Website campaigns

Track where a website ranks in Google or Bing organic search results from one city or ZIP code with the RankShark Track API, and see who ranks above it.

A website campaign tracks a domain instead of a Maps listing. It searches each keyword from one location (a city or ZIP code) and records the site's position in the organic results. Use it for businesses without a Maps listing, or to follow a site's search rankings next to its map rankings.

Grid campaignWebsite campaign
TracksA business listingA domain (subdomains count)
WhereEvery point of a gridOne city or ZIP code
EnginesAllsearch, bing_search or ai
CostOne point per grid pointOne point per keyword

Pick the location

Search for a city or ZIP code. Send a result as the campaign's location, with its label, lat and lng:

curl -X POST https://panel.rankshark.io/v1/track/places \
  -H "Authorization: Bearer $RANKSHARK_TRACK_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "78704",
    "country": "us"
  }'
{
  "places": [
    {
      "label": "Austin, Travis County, Texas",
      "lat": 30.2427,
      "lng": -97.7697
    }
  ]
}

A location with only a label also works: it is placed for you by the same search, in the campaign's country. Place searches count toward 120 lookups an hour.

Create the campaign

Set mode to website and give domain, location, country and the engine. grid, center and zoom are not used.

curl -X POST https://panel.rankshark.io/v1/track/campaigns \
  -H "Authorization: Bearer $RANKSHARK_TRACK_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Harbor Dental · Google search",
    "mode": "website",
    "domain": "harbordental.example",
    "location": { "label": "Austin, Travis County, Texas", "lat": 30.2427, "lng": -97.7697 },
    "country": "us",
    "engines": ["search"],
    "keywords": ["dentist austin", "teeth whitening austin"],
    "schedule": { "freq": "weekly", "hour": 9, "dow": 1, "tz": "America/Chicago" },
    "clientId": "tc_5Rw8Jn3Ys2QeLk"
  }'

The answer is a campaign like the one in Create a campaign, with "mode": "website", the placed location, a one-point grid and "points": 1.

Run and read it

Run it like any campaign: POST /v1/track/campaigns/{id}/run. Each keyword becomes one scan with one point. When it is done, read it with GET /v1/track/scans/{id}. The parts that differ from a grid scan:

{
  "mode": "website",
  "engine": "search",
  "location": { "label": "Austin, Travis County, Texas", "lat": 30.2427, "lng": -97.7697 },
  "metrics": { "points": 1, "total": 1, "found": 1, "foundPct": 100, "top3": 0, "top10": 1, "arp": 6, "atrp": 6, "solv": 0 },
  "points": [
    {
      "i": 0, "row": 0, "col": 0, "lat": 30.2427, "lng": -97.7697, "st": "ok",
      "rank": null,
      "org": 6,
      "serp": [
        { "pos": 1, "domain": "bluebonnetdental.example", "title": "Bluebonnet Family Dentistry | Austin, TX" },
        { "pos": 2, "domain": "yelp.com", "title": "Best Dentists in Austin" },
        { "pos": 6, "domain": "harbordental.example", "title": "Harbor Dental | Austin dentist" }
      ]
    }
  ]
}
  • org is the site's organic position. null means it is not in the top 20.
  • On a website campaign, metrics scores the organic position, so arp is simply the position.
  • serp lists the organic top 10 (shortened here), so you can see who ranks above you. The competitors list shows them by domain.

Search results on a grid campaign

A grid campaign can also follow its website in the search results. Add search to engines:

{
  "engines": ["maps", "search"],
  "webGrid": false
}

By default the web results are read once, from the business's city. Set webGrid: true to read them at every grid point. Each point is charged at that engine's cost, which GET /v1/track/engines lists as pointCost.

On this page