Entity SEO API - Google Knowledge Graph for Any URL
Pricing
from $19.90 / 1,000 results
Entity SEO API - Google Knowledge Graph for Any URL
See what Google thinks your pages are about. Entity SEO & entity extraction API: Google Knowledge Graph entities + 0-100 scores for any URL. Free to try.
Pricing
from $19.90 / 1,000 results
Rating
0.0
(0)
Developer
Thodor
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
2
Monthly active users
8 days ago
Last modified
Categories
Share
An entity extraction API that shows what Google thinks a page is about. Paste any URL and get back the Google Knowledge Graph entities Google associates with that page, each scored 0 to 100 and resolved to a human-readable name. This is Google's own read of the live page, not a re-analysis of text you paste in.
Run your page next to the competitor above you and the difference stops being a mystery: a scored list of concepts Google credits them for and not you. Scores update on recrawl, usually well before rankings move, so the same call doubles as a feedback loop: edit, re-run, see whether Google understood.
๐ How to find the entities Google associates with a page
- Paste one or more page URLs into the URLs field. Bare domains work;
https://is assumed. - Click Start.
- Open the Output tab and click Export for JSON, CSV, Excel, or HTML.
๐ So what do you get?
| ๐ง Every entity Google credits the page | ๐ฏ 0 to 100 confidence scores | ๐ท๏ธ Names, not codes |
|---|---|---|
| ๐ Stable Knowledge Graph IDs | ๐ Entity descriptions | ๐ผ๏ธ The page's hero image |
| ๐ About-this-site link | #๏ธโฃ Entity count per URL | ๐ซ Failed URLs logged, never billed |
๐ฅ What a competitor gap looks like
Real output from two pages competing for "tiktok comments scraper", one ranking #1 and one #6 (abridged, July 2026):
| Entity Google credits | Page ranking #1 | Page ranking #6 |
|---|---|---|
| web scraping | 60 | 65 |
| TikTok | 57 | 63 |
| application programming interface | 63 | 15 |
| web crawler | 37 | not credited |
| video recording | 38 | 58 |
| JSON | not credited | 19 |
Both pages get credit for the basics, so Google understood what they are. The gap is the content brief: the #1 page scores 63 on API and 37 on web crawler, the #6 page scores 15 and nothing. Own the #6 page? Those two rows are what to add. No claim that this is why #1 wins, but it is what you can measure, and scores shift on recrawl, so you also learn whether the fix landed.
โ๏ธ Compared to NLP and entity tools
| This actor | Google Cloud NLP | TextRazor | InLinks / WordLift | |
|---|---|---|---|---|
| Input | โ A URL | โ Text you supply | โ ๏ธ Text or URL | โ ๏ธ URL / your CMS |
| Entities from | โ Google's own page understanding | โ NLP run on your text | โ TextRazor's model | โ Their own model |
| Score | โ 0 to 100, comparable across pages | โ ๏ธ Relative salience | โ ๏ธ Relevance | โ ๏ธ Varies |
| Pricing | โ Pay per URL, no subscription | โ ๏ธ Usage-based, you crawl | โ From ~$200/mo | โ ~$39-49/mo |
An NLP model can only tell you what your text says; your text can be fine while Google's model of the page is not. From a real run: a page with "Exporter" in its headline scored 3/100 for export, because the title tag hadn't caught up with the copy. No text-analysis tool would have caught that.
๐ฏ Three things people run this for
| How | |
|---|---|
| ๐ฅ Competitor gap briefs | Run your page and theirs in one run, diff on entity_id. "Their page is somehow stronger" becomes "they score 63 on API, we score 15" |
| โฑ๏ธ Edit feedback before rankings move | Edit the page, wait for the recrawl, re-run. Shifted scores mean Google understood the change, usually weeks before a rank tracker reacts |
| ๐ก Indexation monitoring | Daily run on a Schedule. Any entities at all prove Google has crawled and classified the page, so the day an empty list turns into entities is the day a new page got picked up |
๐ฅ Input
{"urls": ["https://en.wikipedia.org/wiki/Marie_Curie","https://www.nike.com/"]}
urls: the pages to analyze. Any URL works, including ones you don't own: competitors, whole SERPs, your own site section
That is the whole input.
๐ค Output
One record per URL, entities ranked highest confidence first. Failed URLs are never charged and never appear in the dataset; they land in the FAILURES record of the run's key-value store with reasons.

{"url": "https://en.wikipedia.org/wiki/Marie_Curie","entity_count": 34,"entities": [{ "entity_id": "/m/053_d", "score": 100, "name": "Marie Curie", "description": "Polish-French physicist and chemist (1867โ1934)" },{ "entity_id": "/m/059x1", "score": 65, "name": "Nobel Prize", "description": "set of annual international awards" },{ "entity_id": "/m/063wl", "score": 58, "name": "Pierre Curie", "description": "French physicist (1859โ1906)" }// HIDDEN: 31 more entities, ranked by score],"hero_image": "https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9Gc...","about_this_site": "https://www.google.com/search?q=About+https://en.wikipedia.org/wiki/Marie_Curie&tbm=ilp"}
โ ๏ธ Site-level entities show up on every page. Your brand, platform, and domain score high on every URL of your site. Add a sibling page from your own site to the run and subtract what both share; what remains is the page's actual topic profile.
Fields
| Field | Description |
|---|---|
entity_count | Number of entities returned for the page |
entities[].entity_id | Google Knowledge Graph / Freebase ID, like /m/053_d. Stable across languages and phrasings, so diff on this, not on names |
entities[].score | Google's confidence, 0 to 100. The page's main subject sits near 100 |
entities[].name, entities[].description | Resolved via Wikidata. null for the few IDs with no public mapping |
hero_image | The page's hero image, when Google has one |
about_this_site | Google's "about this site" link, when available |
โ๏ธ Use it as an entity extraction API
Every run is an HTTP endpoint: POST the same JSON as the form and the records come back in the response body. The Python example is the full competitor gap analysis:
Python
import requestsresp = requests.post("https://api.apify.com/v2/acts/thodor~entity-seo-api/run-sync-get-dataset-items",params={"token": "YOUR_APIFY_TOKEN"},json={"urls": ["https://your-site.com/guide", "https://competitor.com/guide"]},)yours, theirs = resp.json()covered = {e["entity_id"] for e in yours["entities"]}for e in theirs["entities"]:if e["entity_id"] not in covered:print(f'{e["score"]:>3} {e.get("name") or e["entity_id"]}')
Paste that gap list and your draft into an LLM and ask which sections to add or expand; the scores tell it what to prioritize.
Node.js
import axios from "axios";const { data } = await axios.post("https://api.apify.com/v2/acts/thodor~entity-seo-api/run-sync-get-dataset-items",{ urls: ["https://en.wikipedia.org/wiki/Marie_Curie"] },{ params: { token: process.env.APIFY_TOKEN } });data[0].entities.slice(0, 5).forEach((e) => console.log(e.score, e.name || e.entity_id));
curl
curl -X POST "https://api.apify.com/v2/acts/thodor~entity-seo-api/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"urls":["https://en.wikipedia.org/wiki/Marie_Curie"]}'
Swap run-sync-get-dataset-items for runs to fire async with a webhook. The apify-client SDK works too, in Python and JavaScript, and the n8n, Make, and Zapier integrations take the same input.
๐ก Tip: no need to write the JSON by hand. Fill in the form on the Input tab, switch the editor from Form to JSON, and copy the result into your code.
๐ค Entity SEO for AI Overviews and LLM visibility
AI Overviews, ChatGPT, and Perplexity cite pages for what they are about at the entity level. The check is simple: does Google credit your pages for your brand, your products, your core topics? If not, a citation is unlikely however good the writing.
๐ฐ How much does the Entity SEO API cost?
Billing is per URL analyzed, at the rate on the price card on this page. No subscription, no monthly minimum, and failed URLs are not charged.
โ FAQ
What is entity SEO?
Optimizing the things a page is about rather than only the keywords on it. Google's model of a page is a set of Knowledge Graph entities with confidence scores: Marie Curie is /m/053_d whether the page writes "Marie Curie" or "Madame Curie". Being credited for the right entities with high scores is how a page ranks for a topic rather than a single phrase.
Can I use the Entity SEO API for free? Yes. Registering on Apify comes with $5 of free platform credit every month, no credit card needed, enough for several hundred URLs.
Why do some entities come back without a name? Some IDs have no public name or Wikidata mapping anywhere, so they come back bare with their score. A trick that resolves most: give the IDs and the page text to an LLM and ask what each likely refers to. You can also check which competing pages carry the same ID.
Why does a page return no entities? Google doesn't associate entities with every URL; new, thin, or low-authority pages often have none yet. An empty list means the request succeeded and Google has no model of that page. That is an answer, not an error.
Can this tell me when Google indexed my page? Not directly, but a daily schedule turns it into a monitor: the run where an empty list becomes entities brackets first classification to within a day, and the run where the profile shifts brackets a recrawl. Two limits: Google's serving cache refreshes about once a day, so resolution is one day at best, and only a changed profile proves anything; an unchanged one can still follow a recrawl.
Does this tell me which keywords to target? No. It reports what Google credits a page for, not what people search for. Pick targets with keyword research; use this to check whether Google's model of your page matches, and to verify after a recrawl that edits registered.
Is this legal? It returns publicly available entity classifications for URLs you choose to analyze and extracts no private data. Use the output to inform your own content decisions.
๐ Support
Something not working, or a field missing? Message me in the Issues tab and I'll look into it quickly. I'm a solo dev, so don't hesitate.
- Thodor
