Provided by Ahrefs
Ahrefs Organic Keywords
The keywords a domain or URL ranks for in organic search on a date from the Ahrefs index: keyword, best position and ranking URL, search volume, traffic, CPC by default. select, where and order_by are passed to Ahrefs as documented (fields used in where or order_by are billed like returned fields). Up to 250 rows per call (limit 1–250, default 25). No offset or pagination. Price is per Ahrefs API unit. An empty report is reported as no result.
How to run it
Step 1Set up
Once: paste this into your agent's chat. The Skill installs the CLI and logs in by itself. For an agent that cannot use a shell, connect it over MCP instead.
set up https://glasser.ai/SKILL.md
Show me how to use the Ahrefs endpoint /v3/site-explorer/organic-keywords on Glasser.glasser run -p ahrefs -e '/v3/site-explorer/organic-keywords' -i '{"date":"2026-09-01","target":"ahrefs.com"}' --endpoint-version 4Uses endpoint version 4. Inspect the current price before running. Install and log in first on Get Started.
Once per Run:
IDEMPOTENCY_KEY=$(uuidgen)Run it, and copy this same block to send it again:
curl -X POST https://api.glasser.ai/v1/runs \
-H "Authorization: Bearer gl_..." \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-H "Content-Type: application/json" \
-d '{"provider":"ahrefs","endpoint":"/v3/site-explorer/organic-keywords","input":{"date":"2026-09-01","target":"ahrefs.com"},"endpoint_version":4}'Reuse the same Idempotency-Key to send it again: the second send is a read of the first Run. A new key is a new Run and a new Charge. Uses endpoint version 4; inspect the current price before running.
Step 2Try a specific example task
When you need to decide which pages to optimize first, you might look for keywords ranking just outside the top 10 and compare their search volumes to see which pages are worth updating.
Copy this prompt into your agent to find those keywords and their ranking pages.
Use ahrefs:/v3/site-explorer/organic-keywords on Glasser.
For my domain and date, list returned keywords ranking 11–20 by search volume, with their ranking URLs.Endpoint structure
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"target",
"date"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"minLength": 1
},
"mode": {
"enum": [
"exact",
"prefix",
"domain",
"subdomains"
],
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 250,
"minimum": 1
},
"where": {
"type": "string",
"minLength": 1
},
"select": {
"type": "string",
"pattern": "^[a-z_][a-z0-9_.]*(,[a-z_][a-z0-9_.]*)*$",
"minLength": 1
},
"target": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"country": {
"enum": [
"ad",
"ae",
"af",
"ag",
"ai",
"al",
"am",
"ao",
"ar",
"as",
"at",
"au",
"aw",
"az",
"ba",
"bb",
"bd",
"be",
"bf",
"bg",
"bh",
"bi",
"bj",
"bn",
"bo",
"br",
"bs",
"bt",
"bw",
"by",
"bz",
"ca",
"cd",
"cf",
"cg",
"ch",
"ci",
"ck",
"cl",
"cm",
"cn",
"co",
"cr",
"cu",
"cv",
"cy",
"cz",
"de",
"dj",
"dk",
"dm",
"do",
"dz",
"ec",
"ee",
"eg",
"es",
"et",
"fi",
"fj",
"fm",
"fo",
"fr",
"ga",
"gb",
"gd",
"ge",
"gf",
"gg",
"gh",
"gi",
"gl",
"gm",
"gn",
"gp",
"gq",
"gr",
"gt",
"gu",
"gy",
"hk",
"hn",
"hr",
"ht",
"hu",
"id",
"ie",
"il",
"im",
"in",
"iq",
"is",
"it",
"je",
"jm",
"jo",
"jp",
"ke",
"kg",
"kh",
"ki",
"kn",
"kr",
"kw",
"ky",
"kz",
"la",
"lb",
"lc",
"li",
"lk",
"ls",
"lt",
"lu",
"lv",
"ly",
"ma",
"mc",
"md",
"me",
"mg",
"mk",
"ml",
"mm",
"mn",
"mq",
"mr",
"ms",
"mt",
"mu",
"mv",
"mw",
"mx",
"my",
"mz",
"na",
"nc",
"ne",
"ng",
"ni",
"nl",
"no",
"np",
"nr",
"nu",
"nz",
"om",
"pa",
"pe",
"pf",
"pg",
"ph",
"pk",
"pl",
"pn",
"pr",
"ps",
"pt",
"py",
"qa",
"re",
"ro",
"rs",
"ru",
"rw",
"sa",
"sb",
"sc",
"se",
"sg",
"sh",
"si",
"sk",
"sl",
"sm",
"sn",
"so",
"sr",
"st",
"sv",
"td",
"tg",
"th",
"tj",
"tk",
"tl",
"tm",
"tn",
"to",
"tr",
"tt",
"tw",
"tz",
"ua",
"ug",
"us",
"uy",
"uz",
"vc",
"ve",
"vg",
"vi",
"vn",
"vu",
"ws",
"ye",
"yt",
"za",
"zm",
"zw"
],
"type": "string"
},
"order_by": {
"type": "string",
"pattern": "^[a-z_][a-z0-9_.]*(:(asc|desc))?(,[a-z_][a-z0-9_.]*(:(asc|desc))?)*$",
"minLength": 1
},
"protocol": {
"enum": [
"both",
"http",
"https"
],
"type": "string"
}
},
"additionalProperties": false
}{
"date": "2026-09-01",
"target": "ahrefs.com"
}This Endpoint publishes no output schema. You get the Provider's own response body, unchanged — we do not warrant a shape we cannot guarantee.
How pricing works
| Base fee | Includes up to 50 api units. The same price with or without matching data. | $0.055 |
|---|---|---|
| Per additional api unit | For each api unit after the first 50. | $0.0011 |
| Maximum per Run | The total charge will not exceed this amount. | $55.00 |
| Provider error | The Provider failed to answer. | $0.00 |
| Timed out | The Run exceeded its time limit. | $0.00 |
| Internal failure | An internal error prevented completion. | $0.00 |