SEO

Search Console, crossed with revenue

The reports that tell you what to fix, ranked by the dollars at stake. Needs Search Console connected for the site.

GET/api/v1/sites/{id}/seo/{report}

Reports:

  • actions — the top 5 moves, sorted by monthly dollar impact.
  • queries — clicks, impressions, position and modeled revenue per query.
  • cannibalization — queries where two pages compete, and which to keep.
  • never-converting — queries with traffic but no revenue: deprioritize.
  • brand-split — brand vs non-brand clicks over time.
  • ai-theft — pages losing clicks to AI answers, with a cited vs stolen verdict.
curl "https://datalenk.com/api/v1/sites/3/seo/actions" -H "Authorization: Bearer dlk_live_…"
response
{
  "data": [
    { "kind": "cannibalization", "title": "Consolidate 'png to svg' on /: 2 pages compete",
      "dollars": 67, "severity": "high", "href": "/dashboard/search#cannibalization" },
    { "kind": "opportunity", "title": "Push 'jpg to dxf' into the top", "dollars": 45, "severity": "medium" }
  ]
}

An honest model

Google hides the query at click time, so revenue per query is modeled, not measured: we split each page's organic revenue across its queries, weighted by intent, with a confidence score. Around 46% of clicks come from queries Google anonymizes; that revenue stays in a separate bucket and is never reassigned to the visible queries. The window is fixed to 28 days because Search Console data lags 2 to 3 days.

Not connected

Without a Search Console connection you get a clean 404:

404
{ "error": { "code": "gsc_not_connected",
    "message": "Google Search Console is not connected for this site. Connect it in Dashboard, Search." } }