Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/kagisearch/kite-public/llms.txt

Use this file to discover all available pages before exploring further.

Kagi News displays contextual information about each article’s source — such as the outlet’s country, ownership structure, and whether it is publicly funded or state-controlled. This metadata is stored in media_data.json, a community-editable database that covers thousands of news domains. Contributing to this file helps readers make more informed judgements about the sources they are reading.
Source metadata is shown in the Kagi News app when you hover or click on a source name. Keeping this data accurate and complete helps users understand the editorial context and potential biases of each outlet.

Data source and methodology

The initial dataset was sourced from State Media Monitor, an independent research project that classifies news outlets by ownership and editorial independence. The classification methodology — which defines terms like “State-Funded” and “State-Controlled” — is documented at statemediamonitor.com/methodology.
Refer to the State Media Monitor methodology for guidance on how to classify a news outlet’s typology. It provides clear definitions for each category and criteria for distinguishing between editorially independent public media and state-controlled outlets.

Entry structure

Each record in media_data.json is a JSON object in a top-level array. Here is the structure with a real example:
{
  "country": "France",
  "organization": "Mediapart",
  "domains": [
    "mediapart.fr"
  ],
  "description": "Mediapart is a French independent, nonprofit investigative online newspaper founded in 2008 by Edwy Plenel, a former editor-in-chief of Le Monde. It is known for its in-depth investigative journalism and operates without advertising or state subsidies, relying entirely on reader subscriptions for funding.",
  "owner": "Mediapart's capital is controlled by its founding journalists, ensuring structural independence from external investors or advertisers.",
  "typology": "Private Independent Media"
}
FieldDescription
countryFull country name or ISO 3166-1 alpha-2 code where the organisation is based (e.g. "France", "GB"). Leave as an empty string if unknown.
organizationThe name of the media organisation.
domainsAn array of domain names associated with the organisation (e.g. ["bbc.com", "bbc.co.uk"]). Must contain at least one entry. No duplicates across records.
descriptionA factual summary of the organisation: what it covers, when it was founded, how it is funded, and any notable characteristics.
ownerA description of who owns or controls the organisation.
typologyA classification label drawn from the State Media Monitor methodology.

Typology values

The typology field classifies the editorial and ownership structure of the outlet. Common values used in the dataset include:
TypologyMeaning
Private Independent MediaPrivately owned with no significant state involvement or influence
Private MediaPrivately owned (ownership independence not fully verified)
PublicPublicly funded with editorial independence from the state
State-FundedReceives significant public funding but retains some editorial independence
State-ControlledEditorially directed or heavily influenced by the state
Refer to the State Media Monitor methodology for precise definitions and edge cases.

Contributing to media_data.json

1

Find an existing entry or create a new one

Search media_data.json for the organisation you want to update. If it is already present, locate the record and note any fields that are missing or incorrect. If the organisation is not yet in the file, you will add a new JSON object to the array.
2

Fill in all required fields

Every record must include country, organization, domains, description, owner, and typology. The validation script (scripts/validate-media.ts) will flag any record that is missing a required field or has a duplicate domain.
  • Use an accurate, full domain name (e.g. "bbc.co.uk" — not "www.bbc.co.uk").
  • Write description and owner as neutral, factual prose.
  • Choose the most accurate typology label based on the State Media Monitor methodology.
3

Run the validation script

Before submitting your changes, run the media validator to catch missing fields and duplicate domains:
npx tsx scripts/validate-media.ts
The script also cross-references domains in media_data.json against feed URLs added in your current branch and warns about any domains that appear in kite_feeds.json but are not yet represented in media_data.json.
4

Submit a pull request with sources

Open a pull request with your changes. In the PR description, include links to the sources you used to determine the typology, owner, and other classification fields. This is especially important for state-funded or state-controlled classifications, which can be contested.

Validation script reference

scripts/validate-media.ts performs the following checks on media_data.json:
CheckBehaviour
Missing required field (country, organization, domains, description, owner, typology)Printed to stderr
Empty domains arrayPrinted to stderr
Duplicate domain across recordsPrinted to stderr
Domain in kite_feeds.json (added in current branch) not present in media_data.jsonAdvisory warning printed to stderr
The script exits with code 0 in all cases — it is advisory and will not block a PR. However, addressing the warnings before submitting keeps the dataset consistent.

Build docs developers (and LLMs) love