If you're just starting with SEO, finding an initial set of keywords to target can be a really difficult first step. There are unlimited number of options and paths for you to take. Our AI Extractor endpoint will help you get started by suggesting keywords based on your website's content.
We use a variety of AI models to best approximate what the URL you provide is linguistically about by examining its structure, content and meta tags.
IMPORTANT: This endpoint cannot currently parse websites that load content dynamically with JavaScript or is gated behind scraping prevention tools like Cloudflare. We're currently working on implementing a solution and we'll release it once it's ready.
1 token/credit per unique keyword
- Unique keywords are keywords that are not in our local cache.
Minimum cost per execution is capped at 1 token/credit per request
> POST https://api.jsonrepo.com/v1/seo/ai_keyword_extractor
Field | Description |
---|---|
X-API-Key | Required Your API Key |
Field | Type | Description |
---|---|---|
url | String | Required Accepts: properly formatted fully qualified URL. Example: https://jsonrepo.com/blog |
limit | Integer | Optional The number of maximum recommendations to be generated by our AIDefault: 10 Range: 1 <= limit <= 20 |
Say you want to get 10
keyword recommendations for a particular URL. Simply fire a request to our servers and the AI will then do its best to satisfy your requirements.
However, Because AI output is non-deterministic, the endpoint may return a couple of duplicate keywords if you run the same request twice. In order for you to not get charged for those duplicates, we deduct from the total cost any keywords that exist in our cache. That way your maximum cost is:
(1 * 10) - number of cached keywords
While this may seem complicated, in reality, it is far cheaper than most other alternatives out there as it maintains creative output without burdening you with high running costs.
A successful request will result in a populated payload
field with the expected output.
Response Time:
AI output is bound by the efficiency of the model and the prompt enabling it. The bigger your
limit
is, the longer the request will take to process. Please be patient as processing the information could sometimes take between 1 and 10 seconds.
// Generate `3` keywords for the domain `https://snowball.club`
curl -X POST https://api.jsonrepo.com/v1/seo/ai_keyword_extractor \
-H "X-API-Key: {YOUR_API_KEY_HERE}" \
--data-urlencode "url=https://snowball.club/" \
--data-urlencode "limit=3"
// Server Response
{
"http_code": 200,
"http_message": "Ok",
"timestamp": 1732454539,
"message": "Successful execution.",
"payload": {
"keywords": {
"input": {
"url": "https://snowball.club",
"limit": 3
},
"output": [
{
"id": 3054,
"keyword": "increase twitter followers",
"volume": 3600,
"competition": 43,
"cpc": 0.13,
"trend": [
{
"year": 2023,
"month": "November",
"value": 2900
},
// 12 months data
...
{
"year": 2024,
"month": "October",
"value": 2900
}
],
"last_updated": "24 November 2024",
"region": "global",
"length": 26,
"difficulty": 2,
"volume_score": 2,
"ad_score": 3,
"origin": "cache"
},
{
"id": 3052,
"keyword": "twitter content creation",
"volume": 20,
"competition": 7,
"cpc": 0,
"trend": [...],
"last_updated": "24 November 2024",
"region": "global",
"length": 24,
"difficulty": 1,
"volume_score": 1,
"ad_score": 2,
"origin": "cache"
},
{
"id": 3053,
"keyword": "monetize twitter audience",
"volume": 0,
"competition": 0,
"cpc": 0,
"trend": [],
"last_updated": "24 November 2024",
"region": "global",
"length": 25,
"difficulty": 1,
"volume_score": 1,
"ad_score": 1,
"origin": "cache"
}
]
}
}
}
A failed request will result in an error output as detailed in Error Rules. If the endpoint validation fails due to missing, badly formatted or invalid parameters, the endpoint will return HTTP code 400
along with a message
detailing the error.
// Request without `url` parameter
{
"http_code": 400,
"http_message": "Bad Request",
"timestamp": 1730173006,
"message": "'url' must be provided with proper formatting. Ex: https://jsonrepo.com/xyz",
"payload": []
}
// Request made for a website that's has anti-ai bot protection
{
"http_code": 400,
"http_message": "Bad Request",
"timestamp": 1730172327,
"message": "'url' provided returned an empty response.",
"payload": []
}