Skip to content
CranSEO
CranSEOGet $100 free

Alternatives to DataForSEO, read as a glossary of actions

A reference you can keep open next to the notebook. First the actions and their price, then the vocabulary that trips people up when a link table lands in R.

CranSEO research team ·

How to use this page

Find the action you need, note its credit cost, then check the term list below for anything unfamiliar. We list no column names here because you should read them from your own glimpse() output.

Actions: what one call gives you

ActionCreditsWhat you get
domain, overview, stats, suggestFreeQuick profile of a domain and suggestions; no key
bulk_dr1DR for up to 2,000 domains per call
compare1Side-by-side figures for up to 20 domains
top, dr_distribution, tld_breakdown1Rankings and distributions of the index
refdomains, backlinks2Rows of referring domains or individual links
anchors, toppages, anchor_cloud2Anchor text and most-linked pages
intersect2Domains linking to 2 to 10 targets at once
search, keyword3Full-text over anchors, titles and URLs; exact-anchor lookup

Terms that confuse people in a data frame

TermPlain meaning
Referring domainA distinct site that links to you, counted once however many links it sends
BacklinkOne link from one page to another; many can come from the same referring domain
DRround(100 log(ref_domains + 1) / log(2 10^7)); a log scale, so 10 to 20 is easier than 70 to 80
AnchorThe clickable text of a link, useful as a categorical column
Link graphOur own crawler's map of domain-to-domain links: 2,774,625,913 of them
SnapshotThe monthly state of the index; store its date next to every pull
CreditBilling unit, $0.0001 each; a call is billed once whatever the row count

Reading the action table like a data model

Think in grains. Every action returns rows at a certain level, and mixing levels is the quickest way to double-count.

refdomains gives one row per linking site, backlinks gives one row per link, anchors gives one row per distinct anchor text. A join between the first and the second multiplies rows, so aggregate before you merge and check nrow() before and after.

Paging works the same everywhere: page and per, with per between 10 and 5000, sorted by sort and order=asc|desc. Up to 1,000 rows come back per call, and deep pagination stops at 50,000, so ask for the sort that puts your answer first.

For the budget side of these choices, see the notebook budget, and for a chosen provider mix the decision tree.

Two warnings before you model anything

DR is not Moz DA. It is our own metric, built only from referring-domain counts, so never mix it with Ahrefs DR in one regression.

Counts also depend on the crawl. A site with a sudden jump after the March 2024 core update may simply have been crawled more fully this month, so check the snapshot date before telling a client anything.

Treat the glossary as a contract with your future self. If a column surprises you in six months, the definition above is what you should have assumed.

Naming habits for your own columns

Rename on import. Do it once.

Prefix columns by action, for example refdomains or anchors, before you join anything, so a merge never produces two columns that mean different things under the same name. Write the rename step into a function and reuse it in every notebook that touches the API.

This costs five lines and saves the argument about what a column means, which is the most common source of wrong numbers in link reports.