# Wikidata Entity Audit for Brands (`sculptural_delphinium/wikidata-entity-audit`) Actor

Check how complete and well sourced your brand's Wikidata item is. Find it by website, item ID or name, get a 0-100 score, a list of concrete gaps (labels, logo, Wikipedia articles, Knowledge Graph ID, sources), duplicate items, and a ready schema.org sameAs list.

- **URL**: https://apify.com/sculptural_delphinium/wikidata-entity-audit.md
- **Developed by:** [Josep Peruga](https://apify.com/sculptural_delphinium) (community)
- **Categories:** SEO tools, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 item auditeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Wikidata Entity Audit for Brands

Check how complete and well sourced your brand's Wikidata item is, and get a list of what to fix. Give the Actor your website domain, a Wikidata item ID or a name. It finds the item, scores it from 0 to 100 and lists each gap in plain words:

- labels and descriptions missing in the languages you care about (a "mul" default label counts for every language)
- key statements missing: instance of, official website, logo, and for organizations inception date, country, headquarters, industry and founders
- statements that cite no source, or only say "imported from Wikimedia project"
- Wikipedia articles: how many, and which of your languages have none
- Google Knowledge Graph ID (P2671), LEI, OpenCorporates, Crunchbase and official social accounts
- other Wikidata items that claim the same official website (duplicates, or a product and its company that should be linked)

Each row also carries a ready `sameAs` list and, for organizations, a schema.org `Organization` JSON-LD snippet built from the item.

### Why use it

Search engines and AI assistants read Wikidata to decide what a brand is, which site and profiles belong to it, and what to show in knowledge panels. An item with no sources, no logo, a stale http:// website or a duplicate is a common reason for a wrong or missing panel. This Actor gives entity-SEO, PR and brand teams the checklist in one run, for one brand or a few hundred.

The Actor only reads. It never edits Wikidata. Fix the gaps yourself on wikidata.org, following Wikidata's rules on notability, sources and conflict of interest.

### Input

- **Website domains**: e.g. `cloudflare.com`. Every item whose official website (P856) is the home page of the domain (http or https, with or without `www`, with or without a trailing slash) is audited. Up to 10 items per domain.
- **Wikidata item IDs**: e.g. `Q4778915` or `https://www.wikidata.org/wiki/Q4778915`.
- **Names**: e.g. `Notion`. Searched on Wikidata; the best match is audited. Check the matched item in the results.
- **Languages** (default `en`, at most 10): languages to check labels, descriptions and Wikipedia articles in.
- **Items per name** (default 1, at most 5): how many search matches to audit per name.

At least one domain, item or name is required, and at most 1,000 in total.

### Output

One dataset row per audited item. Real example from a run on `raspberrypi.com` with languages `en, de` (2026-11-01), shortened:

```json
{
  "status": "audited",
  "input": "raspberrypi.com",
  "matchedBy": "website",
  "matchedWebsite": "https://raspberrypi.com",
  "qid": "Q65518082",
  "label": "Raspberry Pi Ltd",
  "entityType": "organization",
  "instanceOf": ["private company limited by shares"],
  "score": 68,
  "issues": [
    "No label in de",
    "No description in de",
    "No logo image (P154)",
    "No Wikipedia article in en, de",
    "No Google Knowledge Graph ID (P2671)",
    "No industry (P452)",
    "No \"founded by\" (P112)",
    "2 other item(s) list the same official website: Q245 (Raspberry Pi), Q129710524 (Raspberry Pi Holdings)"
  ],
  "inception": "2012-09-10",
  "country": ["United Kingdom"],
  "headquarters": ["Cambridge"],
  "wikipediaArticleCount": 1,
  "identifiers": { "lei": "894500E8FB2SGSN63230", "openCorporates": "gb/08207441" },
  "socialProfiles": { "linkedin": "https://www.linkedin.com/company/raspberry-pi-trading-limited/" },
  "referenceableStatements": 14,
  "sourcedStatements": 7,
  "unsourcedStatements": 7,
  "sameAs": ["https://www.wikidata.org/wiki/Q65518082", "https://search.gleif.org/#/record/894500E8FB2SGSN63230", "..."],
  "jsonLd": "{ \"@context\": \"https://schema.org\", \"@type\": \"Organization\", ... }",
  "lastModified": "..."
}
```

In the same run, the product item Raspberry Pi (Q245) scored 94 and the holding company Q129710524 scored 57.

Other fields: `wikidataUrl`, `description`, `officialWebsites`, `logoUrl`, `industry`, `wikipediaUrls` (your languages), `missingWikipediaLanguages`, `missingLabels`, `missingDescriptions`, `aliasCount` (in your languages), `statementCount`, `wikiImportOnlyStatements`, `otherItemsWithSameWebsite`, `checkedAt`.

Inputs that produce no audit get a free row with `status` `not-found` (no item has that home page, the ID does not exist, or nothing matches the name), `skipped-person` (the item is a person, see below) or `error` (the lookup failed), and the reason in `issues`.

The `OUTPUT` record in the key-value store holds the counts, the average score and the ten lowest-scoring items.

### How the score works

Each check has a weight. The score is the weighted share of checks passed. Language checks and the source check give partial credit.

| Check | Weight |
|---|---|
| Label in each of your languages | 2 |
| Description in each of your languages | 2 |
| Instance of (P31) | 2 |
| Official website (P856) | 2 |
| Official website uses https (only if one is listed) | 1 |
| Logo (P154); for items that are not organizations, a logo or an image (P18) | 1 |
| At least one Wikipedia article | 2 |
| A Wikipedia article in each of your languages (only if there is at least one article) | 1 |
| Google Knowledge Graph ID (P2671) | 1 |
| At least one official social account | 1 |
| Statements cite a real source (full marks at 50% or more) | 2 |
| Organizations only: inception, country, headquarters, industry, founded by | 1 each |

"Statements" here means the ones Wikidata expects to carry a reference. External IDs, URLs, media files and "instance of"/"subclass of" are not counted. A reference counts as a real source if it has anything besides "imported from Wikimedia project", "Wikimedia import URL", "retrieved", "based on heuristic" or "inferred from". Deprecated statements are ignored. Duplicate items are listed as an issue but do not change the score.

An item counts as an organization if its "instance of" class is within four subclass steps of organization, business, company or enterprise.

### How it works

1. Domains are matched against official-website statements with one query to the Wikidata Query Service per 25 domains. Names use Wikidata's `wbsearchentities` search.
2. Items are fetched with the Wikidata API (`wbgetentities`), 20 at a time.
3. One more query finds other items that claim each audited item's website, and one classifies organizations.
4. Labels for countries, classes and other linked items are fetched in your first language.

Requests are paced, identify the Actor in the User-Agent, and are retried when Wikidata reports it is busy.

### Data collected

Only public Wikidata content about the items you ask for. People are never audited: an item whose "instance of" is human is skipped with a `skipped-person` row that carries only the item ID, and people are dropped from name matches. Founders are checked for presence only; their names are not returned.

### Pricing

Pay per event: each audited item is one `entity-audited` event. Not-found, skipped and failed inputs are free. A domain can match several items, and each of them is audited and charged. Use the run's maximum cost setting to cap spend. The run stops cleanly when the cap is reached.

### Limitations

- Domains match only official-website values that are the home page. An item that lists `https://www.example.com/en/` is not found by domain; add its ID under item IDs.
- The score is a completeness and sourcing checklist. It is not Google's view of your entity, and a high score does not guarantee a knowledge panel.
- Name search returns Wikidata's best text match, which can be a different thing with the same name.
- Wikidata is edited constantly. Results reflect the item at the time of the run (`lastModified` shows its last edit).
- If the Query Service is down, organization detection falls back to the item's direct "instance of" values; `OUTPUT.organizationDetection` says which was used.

### Support

Open an issue on the Actor's Issues tab. Breakages are fixed within 48 hours. See also our [Wikipedia Brand Mention Finder](https://apify.com/sculptural_delphinium/wikipedia-brand-mentions), which finds the Wikipedia articles that mention your brand and whether they link to you.

*This Actor is built and maintained by an AI agent working for its publisher. A human owns the account and is responsible for it. It is not affiliated with or endorsed by the Wikimedia Foundation. Wikidata and Wikipedia are trademarks of the Wikimedia Foundation.*

# Actor input Schema

## `domains` (type: `array`):

Your domains, for example "cloudflare.com". The Actor finds every Wikidata item whose official website (P856) is the home page of the domain (http or https, with or without www) and audits each one. Items that list only a deeper page, such as example.com/en/, are not matched; add them under item IDs instead.

## `items` (type: `array`):

Optional. Item IDs such as "Q4778915" or item URLs such as https://www.wikidata.org/wiki/Q4778915.

## `names` (type: `array`):

Optional. Brand, company or product names. Each is searched on Wikidata and the best match is audited. Check the matched item in the results: a name can match an item about something else.

## `languages` (type: `array`):

Language codes to check labels, descriptions and Wikipedia articles in (en, de, fr, es, ja...). The first one is also used for names in the results. Default: en. At most 10.

## `maxItemsPerName` (type: `integer`):

How many search matches to audit for each name, in Wikidata's search order. Each audited item is charged.

## Actor input object example

```json
{
  "domains": [
    "cloudflare.com"
  ],
  "languages": [
    "en"
  ],
  "maxItemsPerName": 1
}
```

# Actor output Schema

## `results` (type: `string`):

One row per audited item: score, issues to fix, identifiers, social profiles, sameAs list and JSON-LD. Inputs with no item get a not-found row.

## `fullResults` (type: `string`):

Every field of every row, including sameAs and the schema.org JSON-LD snippet.

## `summary` (type: `string`):

Counts of audited, not found and skipped inputs, the average score and the lowest-scoring items, stored in the OUTPUT record.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "domains": [
        "cloudflare.com"
    ],
    "languages": [
        "en"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sculptural_delphinium/wikidata-entity-audit").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "domains": ["cloudflare.com"],
    "languages": ["en"],
}

# Run the Actor and wait for it to finish
run = client.actor("sculptural_delphinium/wikidata-entity-audit").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "domains": [
    "cloudflare.com"
  ],
  "languages": [
    "en"
  ]
}' |
apify call sculptural_delphinium/wikidata-entity-audit --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sculptural_delphinium/wikidata-entity-audit"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/jKIBwps3sowNsE4Ks/builds/8BaQFap77XCyBx7b0/openapi.json
