Skip to main content
On this page

Free website traffic API

Read website traffic, registry and site data with one API key. Free and Pro accounts both have access.

Credits, plans and auth
  • A domain lookup costs 1 credit; bulk and TLD compares cost 1 credit per domain.
  • Free includes 100 credits a month and Pro 10,000, reset each UTC month.
  • Keyword lookup and keyword rankings (include=search) are Pro.
  • Create a vf_live_ key in the API console and send it as Authorization: Bearer.
  • Website, public ads and publisher research tools are free during early access; responses return credits_spent: 0.

/api/v1Authorization: Bearer vf_live_…v1.4.0

Request

curl -sS "https://vaneform.com/api/v1/domains/example.com?include=scale,registry" \
  -H "Authorization: Bearer $VANEFORM_API_KEY"

Authorization: Bearer $VANEFORM_API_KEY Keep the key in a server environment variable.

Example
{
  "domain": "example.com",
  "status": "ready",
  "refresh_policy": "cache_only",
  "scale": {
    "status": "ready",
    "estimate": "site",
    "visits": 7560000,
    "visits_mom_change_pct": 15.06,
    "as_of": "2026-08-31",
    "confidence": "medium"
  },
  "registry": {
    "status": "ready",
    "created_at": "1995-08-14T04:00:00.000Z",
    "registrar": "RESERVED-Internet Assigned Numbers Authority"
  },
  "report_url": "https://vaneform.com/e/example-com"
}

The sample above is one response for include=scale,registry. Fields with no value are omitted. Visit estimates keep as_of and confidence. scale.estimate is site or search. The domain and each family use the status values below.

statusDescription
readyUsable data is present
partialOnly some fields are present
missingNo saved result
errorThis family could not be read

Credits

CallCreditsWhen it spends
Read a domain, include omits search1A new usable domain result. Repeats within 24 hours cost 0.
include contains search200Pro. Spends when the domain status is ready or partial, and either no saved ranking exists or its status is ready. Either case can return search.status missing. A saved ranking with status missing, error, or partial costs 0.
Check one keyword60Pro. Spends when the cache misses and the returned status is ready. A cached status of ready or empty costs 0.
Each domain in bulk or TLD1Each domain with data. Repeats within 24 hours cost 0. Up to the per-call domain cap.
Account0Every call
PlanCredits / monthDomains per compareKeyword data
Free1003—
Pro10,00030Yes

Each key allows 60 requests a minute and 5000 a day; over that returns 429 lookup_rate_exceeded with Retry-After.

Cache, receipt and balance rules
Cache
A domain read sets refresh_policy to cache_only and returns the saved result. baidu and include=search also return the saved result. Bulk and TLD fetch traffic when that domain has no usable monthly visits, and fetch registry data when the record needs a refresh. Compare responses have no refresh_policy field.
Receipt
include=search keeps a 24-hour receipt per account and domain; another read on it costs 0. Keyword credits are in the row above.
Balance
Before it returns a body, a call checks the balance covers its credits: 1 for a domain read, 200 with include=search, 60 for a keyword cache miss. A short balance returns credits_exhausted and the call costs 0.
lookup
lookup is the daily website-lookup count on the site. A null limit means no daily cap. API keys are paced separately.

Domain

GET/api/v1/domains/{domain}

Read the saved traffic, registry, site profile, and link data for one domain.

ParameterDescription
domainRequiredDomain, such as example.com. A leading www. is removed and the host is lowercased. The receipt uses that host.
includeOptionalComma-separated. Default is scale,registry,profile,popularity. baidu and search return only when named here. An unknown name returns invalid_request.
includeWhen it returnsFields
scaleDefaultvisits is estimated monthly visits. visits_mom_change_pct is the month-over-month change in percent. as_of is the data date. confidence is low, medium, or high. estimate is site or search. global_rank is an integer. country_rank has country and rank. top_regions has country and share. country in both is an English country name, such as United States. monthly_visits has month and visits, and month looks like 2026-08. bounce_rate, sources values, and top_regions.share are 0 to 1. sources keys that appear come from direct, search, social, referrals, mail, display_ads, search_paid, gen_ai, and other. Also pages_per_visit and time_on_site_seconds. Each top_keywords item has keyword, search_volume_monthly, and estimated_visits.
registryDefaultcreated_at, expires_at, updated_at, registrar, name_servers, statuses, dnssec, age_days, as_of. name_servers and statuses are arrays of strings. dnssec is true or false.
profileDefaulttitle, description, final_url, http_status, lang. dns a, aaaa, mx, and ns are arrays of strings. In email_auth, spf, dmarc, mta_sts, bimi, and dkim are true or false, and dmarc_policy is the policy name. hosting includes asn, name, country, and prefix. tls includes issuer, protocol, valid_to, and days_remaining.
popularityDefaultlink_rank is the public link rank. Also tld, tld_rank, referring_ips, referring_subnets, rank_change, board_rank, as_of, and confidence. board_rank is the leaderboard place.
baiduName it in includeReads the saved Baidu weights. status missing or error returns status, as_of, and confidence. Other statuses return keyword_count, estimated_visits.min, estimated_visits.max, as_of, and confidence. weights keys that appear come from baidu_pc, baidu_mobile, q360_pc, sogou_pc, toutiao, bing_pc, and google.
searchName it in include, ProReads the saved result: which terms this site ranks for, which pages they land on, and the sites competing in search. include_subdomains is false, covering the queried host. organic_etv is estimated visits from organic search. keyword_count, page_count, and competitor_count are totals and can exceed the length of the matching array. keywords has at most 25 rows, with keyword, position, search_volume_monthly, estimated_visits, and url. role is brand or other. change is new, up, or down when the rank moved. ai is true when the term appears in an AI overview. thread is present for a forum URL. pages has at most 20 rows. Forum URLs stay on keywords. Each page has url, keyword_count, and estimated_visits. pages[].keyword_count counts keywords from this sample that land on that URL. competitors has at most 20 rows, with domain, keyword_count, estimated_visits, and avg_position. competitors_pending true means competitors are not in the cache yet. Also as_of, confidence, ai_overview_count, new_count, up_count, and down_count.

One family per path

Each path still returns domain, status, and refresh_policy, plus report_url when a report exists. The other fields are only the family named in the path. /search requires Pro.

  • /api/v1/domains/{domain}/scale
  • /api/v1/domains/{domain}/registry
  • /api/v1/domains/{domain}/profile
  • /api/v1/domains/{domain}/popularity
  • /api/v1/domains/{domain}/baidu
  • /api/v1/domains/{domain}/search

Keyword

Pro

GET/api/v1/keyword?q=

Read one keyword's monthly searches, CPC, and difficulty, plus organic Google results for the United States in English. The result list has at most 30 rows. market.id is us. market.label is the display name. status is ready, empty, missing, or error. empty means the result has no rows.

ParameterDescription
qRequiredAfter trimming, a keyword longer than 200 characters returns invalid_request. The lookup lowercases the query, collapses consecutive spaces, and keeps the first 80 characters. The keyword field in the response is that normalized value.
FieldsDescription
search_volume_monthlyMonthly searches
cpc_usdCost per click in USD. cpc_low_usd and cpc_high_usd sit beside it.
keyword_difficultyDifficulty
search_intentinformational, navigational, commercial, or transactional.
paid_competitionLOW, MEDIUM, or HIGH.
volume_trendmonthly, quarterly, and yearly are percents. A value of 0 omits that field.
monthly_searchesUp to the latest 12 months. Each item has month and volume. month looks like 2026-08.
items[].positionGoogle result position
items[].domainResult domain
items[].urlResult URL
items[].title / descriptionResult title and snippet. Omitted when absent.
items[].scaleSaved traffic for that result domain. The fields match scale on the domain call.
items[].report_urlReport URL for that result on this site. Omitted when absent.
Example
{
  "keyword": "website traffic",
  "market": { "id": "us" },
  "status": "ready",
  "as_of": "2026-09-01",
  "search_volume_monthly": 12100,
  "cpc_usd": 2.4,
  "keyword_difficulty": 46,
  "search_intent": "informational",
  "items": [
    {
      "position": 1,
      "domain": "example.com",
      "url": "https://example.com/",
      "scale": { "visits": 7560000, "estimate": "site" }
    }
  ]
}

Compare

GET/api/v1/bulk?q=

Read traffic and registry data for several domains at once.

ParameterDescription
qRequiredDomains separated by commas or newlines, for example example.com,iana.org. Duplicate domains are kept once. Domains that cannot be parsed are skipped. When none can be parsed, or the count exceeds this plan's per-call cap, the response is invalid_request. The response q is those domains, deduplicated, without a leading www., lowercased, and joined by commas.

GET/api/v1/tld?q=&s=

Compare one registrable name across suffixes. The default suffixes are com, ai, io.

ParameterDescription
qRequiredRegistrable base name, such as example. Put the suffixes in s. example.com is read as example. The q field in the response is that lowercased base name.
sOptionalComma- or whitespace-separated suffixes. An omitted s, or a list where every suffix fails to parse, uses com, ai, io. Unparseable suffixes in the list are skipped, and repeated suffixes are kept once. Suffixes beyond this plan's per-call cap are dropped. The response suffixes and items follow the site's suffix order, which can differ from the order in the request. Match rows to the returned suffixes.
FieldsDescription
items[].titleSite title
items[].scale.statusStatus of that domain's traffic.
items[].scale.visitsEstimated monthly visits
items[].scale.visits_mom_change_pctMonth-over-month change, in percent
items[].registry.statusStatus of that domain's registry record.
items[].registry.created_atRegistration time
items[].registry.expires_atExpiration time
items[].report_urlReport URL on the site
suffixesPresent on TLD compare. Default is com, ai, io.
countNumber of items

The sample below is the response for /api/v1/tld?q=example&s=com. An omitted s uses com, ai, io. count equals the number of items. A bulk response has no suffixes field.

Example
{
  "q": "example",
  "suffixes": ["com"],
  "count": 1,
  "items": [
    {
      "domain": "example.com",
      "title": "Example Domain",
      "scale": {
        "status": "ready",
        "visits": 7560000,
        "visits_mom_change_pct": 15.06
      },
      "registry": {
        "status": "ready",
        "created_at": "1995-08-14T04:00:00.000Z",
        "expires_at": "2026-08-13T04:00:00.000Z"
      },
      "report_url": "https://vaneform.com/e/example-com"
    }
  ]
}

Account

GET/api/v1/account

Read the plan, website-lookup count, and credits. This call costs 0. Check credits.remaining and credits.resets_at before a batch.

Example
{
  "plan": "pro",
  "access_tier": "pro",
  "lookup": {
    "used": 4,
    "limit": null,
    "remaining": null,
    "resets_at": "2026-09-30T00:00:00.000Z"
  },
  "credits": {
    "used": 260,
    "limit": 10000,
    "remaining": 9740,
    "resets_at": "2026-10-01T00:00:00.000Z",
    "top_up_remaining": 0
  }
}
FieldsDescription
planfree or pro
access_tierfree or pro, the same value as plan.
lookup.usedWebsite lookups used today
lookup.limitDaily website-lookup cap. null means the plan has no daily cap
lookup.remainingLookups left today. null when limit is null
lookup.resets_atWhen the daily count resets
credits.usedPlan credits used this UTC month
credits.limitCredits included with the plan this month
credits.remainingCredits available now, including top-up balance
credits.resets_atStart of the next UTC month
credits.top_up_remainingTop-up balance

Errors

A failed response body is error.code, error.message, error.status, error.request_id, and error.docs_url. error.message is English. A 429 response includes Retry-After.

Example
{
  "error": {
    "code": "credits_exhausted",
    "message": "Credits are used up for this billing period.",
    "status": 429,
    "request_id": "req_…",
    "docs_url": "https://vaneform.com/docs/api#error-credits_exhausted"
  }
}
HTTPcodeDescription
400invalid_requestinclude, q, or another parameter could not be parsed.
400invalid_domainThe domain is missing or cannot be used as a public registrable domain.
401unauthorizedThe request has no Authorization: Bearer key, the header is malformed, or the query string includes api_key or key.
401invalid_api_keyThe key is invalid or has been replaced.
429lookup_limit_exceededToday's website lookups are used up.
429credits_exhaustedThe balance cannot cover this call. The response is an error and this call costs 0. credits.resets_at is the next reset.
429lookup_rate_exceededToo many requests for this key (60 a minute or 5,000 a day). Retry-After gives the seconds to wait.
403search_requires_proinclude=search is a Pro feature. The body carries upgrade_url.
403pro_requiredKeyword data is a Pro feature. The body carries upgrade_url.
404not_foundThe path does not exist.
405method_not_allowedPOST returns this code.
500internal_errorThe server did not finish this request.

Free research tools

Website, ads, publisher and link research, free during early access.

Coverage, query and workspace endpoints
  • Research website signals, Google and Meta ads, publisher connections, outbound links, collected ad copy, recorded opportunities and dated DR changes. Ad-copy search and publisher reverse lookup cover the recorded collection. Results retain observation dates, confidence and coverage.
  • GET /api/tools/query reads stored data; POST can fetch public sources. Queries work anonymously. Add your Bearer key to record private query history.
  • GET /api/tools/workspace returns your saves, history, monitors and changes. POST accepts save, monitor, remove_save, update_monitor, remove_monitor, check_monitor or read_event. All workspace actions require your Bearer key. Use item IDs from the workspace response; monitor intervals are 1 or 7 days.
curl -X POST 'https://vaneform.com/api/tools/query' \
  -H 'Content-Type: application/json' \
  --data '{"tool":"google-ads","q":"example.com","limit":40}'

Open research tools

HTTP and MCP use the same key. Clients can list the MCP tools without a key; tool calls need it. Paste a config below and replace vf_live_… with your key.

The five research tools

Five free MCP tools support the same workflow: research_site queries public data; get_research_workspace reads your private workspace; save_research stores folders and notes; monitor_research creates daily or weekly targets; manage_research pauses, resumes, changes frequency, checks, removes targets or marks changes read.

https://vaneform.com/mcp

{
  "mcpServers": {
    "vaneform": {
      "url": "https://vaneform.com/mcp",
      "headers": {
        "Authorization": "Bearer vf_live_…"
      }
    }
  }
}

SKILL.md lists the tool names, parameters, and fields. Open SKILL.md

Open source (MIT): a local stdio MCP server, a CLI, and an agent skill. vaneform-mcp on GitHub

Example: one lookup, one credit

A request for example.com with include=scale,registry returns the visit estimate with its as_of month and confidence, plus the registry dates, and spends 1 credit. Free and Pro accounts can use the API; each key allows 60 requests a minute and 5,000 a day.

Questions

What does the website traffic API include?

Free and Pro accounts can use the API. A domain lookup (visit estimate, registry and site data) costs 1 credit, and bulk and TLD compares 1 credit per domain. Free includes 100 credits a month and Pro 10,000. Keyword lookup (60 credits) and include=search (200 credits) are Pro-only.

Are API traffic numbers estimates?

Yes. Every visit figure carries as_of and confidence, and scale.estimate tells you whether it is a whole-site or a search estimate.

Can AI agents use the API?

Yes. The same key works over HTTP and the MCP endpoint, and the OpenAPI document and SKILL.md describe every tool and field.