Skip to content
CranSEO
CranSEOGet $100 free

798.5 billion backlinks indexed

DataForSEO alternative for analysts who live in R

CranSEO returns backlinks, referring domains, anchors and a 0-100 DR as plain JSON, ready for a tibble. $100 of credit is free on sign-up, and the index holds 181,132,097 domains.

  • JSON that reads straight into a tibble
  • Free actions need no key, so notebooks can be shared
  • 1 credit costs $0.0001, with no subscription
GET /api.php?action=domainJSON

$ curl "https://cranseo.com/api.php?action=overview&q=nytimes.com&key=sk_live_..."

Who it is for

Why analysts pick a DataForSEO alternative for link data only

Most notebooks need one table. A dataforseo alternative earns its place when the job is only links: referring domains, anchors, top pages and one comparable trust number per domain, pulled the same way every month so the report can be rerun.

We built CranSEO for that narrow slice. Small, on purpose. It is a REST API on our own crawler and our own link index, with no keyword suites and no rank tracking, so the response is small and predictable. The decision tree shows when that is enough.

That is also its limit. For keyword research, SERP tracking or a daily-fresh crawl, Ahrefs or Semrush remain the fuller products, and a broader provider such as DataForSEO covers ground we do not.

Reproducibility is the real argument. A prepaid balance, a key kept in .Renviron and a monthly refresh give you a pipeline that behaves the same in October as it did in March, as the monthly runbook lays out.

How it works

From key to tibble in four moves

01

Look before you sign in

The free actions domain, overview, stats and suggest need no key. Run one from httr2 inside a notebook and glimpse the result to see the shape.

02

Sign in with Google

The $100 sign-up credit equals 1,000,000 credits and needs no card. Copy the key into .Renviron, never into the .Rmd or .qmd file.

03

Pull in bulk

bulk_dr takes up to 2,000 domains per call for 1 credit. One call can score a whole column of your Search Console links export.

04

Schedule the refresh

The graph updates about once a month, so a monthly job with a dated snapshot is the honest rhythm. Daily runs only repeat the same numbers.

One request, one data frame

The free overview action is enough to test your setup. Swap in a domain from your own export and inspect the columns with glimpse() before you build on them.

r
library(httr2)
library(dplyr)

resp <- request("https://cranseo.com/api.php") |>
  req_url_query(action = "overview", q = "nytimes.com") |>
  req_perform() |>
  resp_body_json()

glimpse(resp)

Where we stand

Good for link tables, not a full SEO suite

We answer one question well: who links to whom, and how strong is that domain on a log scale. Anything beyond links belongs in a different tool, and we say so.

  • Data refreshes roughly monthly, so last week's link may be missing
  • DR is our own metric, comparable in spirit to Ahrefs DR or Moz DA but not the same number
  • Ahrefs sells API units inside plans from $129/month for 200,000 units, at least 50 units per request
  • No keywords, no rank tracking, no SERP data

Checklist

Before the first scheduled run

  • Key stored in an environment variable, not in the notebook
  • One test call logged with the cost shown in the credits field
  • Handling for HTTP 401 (bad key) and HTTP 402 (balance empty)
  • Snapshot date written into every output file
  • A note in the report that DR is a log-scale, in-house number

FAQ

Questions analysts type before switching

What is a good DataForSEO alternative if I only need backlinks?

A link-only API is the leanest swap. CranSEO returns backlinks, referring domains, anchors, top pages and DR as JSON, billed per call from $0.10 per 1,000 calls. Keyword and SERP data are not included, so keep a second tool for those.

Does it work with httr2 and jsonlite?

Yes. Responses are plain JSON, CORS is open, and the key goes in the query string or an Authorization Bearer header. Any R HTTP client works, and each response carries an ok flag so you can fail fast.

How much does one run cost?

One credit is $0.0001. bulk_dr scores up to 2,000 domains for 1 credit, and refdomains or backlinks cost 2 credits per call whatever the row count, up to 1,000 rows. Sign-up gives $100 free.

How do I keep the key out of my repository?

Put it in .Renviron or your CI secrets store and read it with Sys.getenv(). Free actions need no key, so a shared notebook can still run its demo cells without exposing anything.

Is the data fresh enough for weekly reports?

Not really. The link graph refreshes roughly once a month, so weekly reruns mostly repeat numbers. Monthly snapshots with the date stored in the output are the honest design.

Can I join it with Search Console exports?

Yes. Export linking sites from Search Console, send the domain column to bulk_dr, and join on the domain. The worked example on the join page marks every number as hypothetical.

What happens when my balance runs out?

The API answers HTTP 402. Catch that status in your pipeline, stop the run cleanly and top up with USDT (TRC-20) from the account page. A bad or missing key returns HTTP 401 instead.