DEV Community

VNCNT LABS
VNCNT LABS

Posted on

Website traffic checker API: plausible.io's Google traffic, competitor keywords and backlinks for 10 cents

This morning I wanted a quick answer to a simple question: how do the privacy-first analytics tools split Google search traffic between them? Plausible, Fathom, Simple Analytics. I didn't want to open a suite, export three CSVs and clean them up. I wanted one API call per question and rows I could drop into a script.

So I ran my own Apify Actor, Domain SEO Data, on plausible.io. Below is what came back, what it cost, the code I used, and where other tools on the Apify Store are simply better.

(The Store links here carry my Apify affiliate ID, so Apify pays me a small commission if you sign up through one.)

The run

I started from the Actor's public "Website Traffic Checker" preset (overview plus backlink profile) and asked for 10 ranked keywords and 3 competitors on top:

{
  "mode": "report",
  "domains": ["plausible.io"],
  "countries": ["US"],
  "maxKeywords": 10,
  "maxCompetitors": 3,
  "includeBacklinks": true
}
Enter fullscreen mode Exit fullscreen mode

It finished in about 6 seconds and returned 14 rows: one overview row, 10 keyword rows and 3 competitor rows.

What plausible.io looks like in US Google

Metric Value
Estimated monthly organic visits (US) 6,893
Ranking keywords (top 100) 1,535
Top 3 / top 10 139 / 466
Estimated traffic value per month $103,331
Keywords new / up / down / lost since the last update 1,035 / 206 / 214 / 756
Paid search traffic 0
Domain rank (0 to 100) 73
Backlinks / referring domains 637,979 / 16,940
Backlink spam score 15

The first thing that jumped out was how brand-heavy it is. The keyword "plausible" alone (60,500 searches a month, position 1) accounts for about 5,338 of those 6,893 estimated visits. That's 77%. For a company that writes a lot of content, I expected more of the traffic to come from the blog.

The second thing was the backlink profile. About 206,000 of the 638,000 backlinks come from .se domains. That smells like a handful of sitewide links (footer or "analytics by" badges) rather than 200,000 editorial mentions. Referring domains (16,940) is the number I'd trust here, not the raw backlink count.

The traffic number is DataForSEO's click model for Google organic results. It is not total visits, and it won't match Plausible's own dashboard or Similarweb. I only compare domains inside one source.

The keywords it ranks for

These came back sorted by estimated traffic, which is the default:

Keyword Position Monthly searches Ranking URL
plausible 1 60,500 /
plausible analytics 1 1,900 /
google analytics 66 450,000 /
plausible.io 1 170 /
plausible logo 1 210 /
what is plausible 1 720 /
free web analytics service 13 12,100 /open-source-website-analytics
shopify analytics 5 1,600 /blog/shopify-analytics
plausible io 1 170 /
google analytics alternatives 2 720 /

One row I don't fully believe: "google analytics" at position 66 gets credited with about 284 visits a month. That's the click model doing math on a 450,000-search keyword. Nobody clicks through to page 7 that often. If you're building a report for a client, I'd filter out anything below position 20 before summing traffic (the Actor has a maxPosition input for exactly this).

The useful find was "shopify analytics" at position 5 with a blog post. That's the kind of content keyword a competitor could go after, and it's the reason people search "competitor keywords" in the first place.

The SEO competitors

Competitor Shared keywords Share of plausible.io's keywords
semrush.com 600 39.1%
backlinko.com 489 31.9%
hubspot.com 485 31.6%

Not Fathom. Not Matomo. Plausible's search competitors are SEO and marketing publishers, because so much of its non-brand content is about analytics and marketing topics. If you want product competitors, you have to name them yourself. That's what bulk mode is for.

Bulk mode: three analytics tools side by side

Bulk mode returns one row per domain (traffic, keyword count, domain rank) and is meant for long lists. I ran it with three:

Domain Est. US organic visits Ranking keywords Domain rank
plausible.io 6,893 1,535 73
usefathom.com 1,883 781 73
simpleanalytics.com 1,125 4,261 76

Simple Analytics ranks for almost three times as many keywords as Plausible but gets about a sixth of the estimated traffic. Lots of long-tail positions, not many clicks. That one table answered my original question better than an hour of clicking around would have.

What it cost

Prices come from the Actor's current pay-per-event pricing on the Store:

Event Count Price Total
Run start 1 $0.005 $0.005
Domain overview 1 $0.02 $0.02
Ranked keyword 10 $0.001 $0.010
Competitor 3 $0.004 $0.012
Backlink profile 1 $0.05 $0.05
Total $0.097

The bulk run was $0.005 to start, $0.003 per domain and $0.05 per batch of up to 1,000 domains, so $0.064 for three. That batch fee makes bulk silly for three domains and cheap for 1,000 (about $3.06). Domains with no search data aren't charged in report mode.

The public presets worth starting from are Website Traffic Checker (overview plus backlinks, about $0.075), Find a Website's SEO Competitors (25 competitors, up to $0.125) and the Domain Overview Report (100 keywords, 10 competitors and backlinks, up to $0.215).

How it compares with other Apify Actors

I checked these on the Apify API today (October 23, 2026). Prices are per 1,000 results on the free Apify plan unless noted.

Actor Data source What it returns Price per 1,000
vncntlabs/domain-seo-data DataForSEO API Google organic and paid estimates, ranked keywords, competitors, backlinks $20 overviews, $1 keywords, $4 competitors, $50 backlink profiles; bulk $3 per domain plus $0.05 per batch
tri_angle/fast-similarweb-scraper Similarweb Monthly visits, global and country rank, top countries, top keywords $2
tri_angle/similarweb-scraper Similarweb Total visits, traffic sources, competitors, top countries, company info $13
pro100chok/semrush-scraper Semrush and Moz Authority, traffic, backlinks, competitors $15 free plan, $5 Bronze, $4 Gold and up
radeance/semrush-scraper Semrush Authority score, traffic, backlinks, competitors $25 free plan, $20 Silver, $17.50 Gold and up
amassuo/semrush-competitor-keywords Not stated (the slug says Semrush) Ranked keywords and organic competitors $2 keywords, $2 competitors

Where they're better, plainly. If you want total visits from all channels (direct, social, referral), the Similarweb Actors give you that and mine doesn't. Mine only estimates Google search traffic. The fast Similarweb one is also cheaper per domain than my bulk mode, and it has far more users (2,159 versus my 1). The Semrush scrapers give you the Semrush numbers that clients and agencies already recognize. And amassuo's competitor rows cost half of mine.

Where mine fits: keyword rows at $1 per 1,000 are the cheapest I found, the backlink profile comes in the same run, and it calls a licensed data API instead of reading another site's pages. One more honest limit: the numbers update on DataForSEO's schedule, not live. The backlinko.com competitor row today showed the exact same traffic (19,941) and keyword count (30,602) as a run I did on October 17, and the SERP dates on these keywords run from late July to mid September.

The code

Python with apify-client 3.x. In 3.x call() returns a Run object, so the dataset ID is run.default_dataset_id, not run["defaultDatasetId"]:

import os
from decimal import Decimal

from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = {
    "mode": "report",
    "domains": ["plausible.io"],
    "countries": ["US"],
    "maxKeywords": 10,
    "maxCompetitors": 3,
    "includeBacklinks": True,
}

# max_total_charge_usd caps what this run can cost you (pay-per-event)
run = client.actor("vncntlabs/domain-seo-data").call(
    run_input=run_input, max_total_charge_usd=Decimal("0.25")
)
rows = list(client.dataset(run.default_dataset_id).iterate_items())

for d in (r for r in rows if r["type"] == "domain"):
    print(f"{d['domain']}: ~{d['organicTraffic']:,.0f} organic visits/month, "
          f"{d['organicKeywords']:,} keywords, {d['top10']:,} in the top 10")

for k in (r for r in rows if r["type"] == "keyword"):
    print(f"#{k['position']:>3}  {k['keyword']:<32} vol {k['searchVolume']:>7,}  {k['url']}")

for c in (r for r in rows if r["type"] == "competitor"):
    print(f"{c['competitor']:<20} {c['sharedKeywords']} shared keywords ({c['sharedKeywordsPct']}%)")
Enter fullscreen mode Exit fullscreen mode

Running that printed plausible.io: ~6,893 organic visits/month, 1,535 keywords, 466 in the top 10 and the rows above.

Bulk mode with curl, as one synchronous call that returns the dataset rows:

curl -sS -X POST "https://api.apify.com/v2/acts/vncntlabs~domain-seo-data/run-sync-get-dataset-items?maxTotalChargeUsd=0.10" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"mode":"bulk","domains":["plausible.io","usefathom.com","simpleanalytics.com"],"countries":["US"],"includeAuthority":true}'
Enter fullscreen mode Exit fullscreen mode

And if you'd rather ask an assistant, add this to Claude, ChatGPT or Cursor as a remote MCP server. It loads only this Actor, and you sign in to Apify in the browser, so no token goes in the file:

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=vncntlabs/domain-seo-data"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

The tool shows up as vncntlabs--domain-seo-data. Something like "check US organic traffic for these 40 agency domains in bulk mode and sort by traffic" works fine.

Code: https://github.com/PravinrajV/vncntlabs-apify-examples/tree/main/04-website-traffic-checker

If you've compared these traffic estimates against a site's real analytics, I'd like to hear how far off they were. My guess is brand-heavy sites come out closest, but I haven't tested that properly yet.


Disclosure: I build the Apify Actor used here (VNCNT Labs). Every number in this post comes from a real run on Oct 23, 2026, and the prices are Apify Store list prices checked that day.

Top comments (0)