GDELT API endpoint
Returns a frequency-ranked word cloud for US television coverage. `channel` is required and picks what is counted: `transcript`, `caption`, `concept`, `onscreen_text` or `visual`; `station` is also required. Match with the same channel options (with `exclude_` counterparts) and limit by `show`, `day_of_week`, `timespan` or `from` and `to`. Each word has a `label` and `count`.
/gdelt/tv-wordcloudPath parameters:
Query parameters:
channel (required) — which match channel to build the word cloud
from. Allowed values: transcript (GDELT's WordCloudAsr mode), caption
(WordCloudCap), concept (WordCloudCapNLP — Google Knowledge Graph
concept labels, not MID codes), onscreen_text (WordCloudOCR), visual
(WordCloudVisual). This selects which mode is called; the query below
can still match on any combination of channels regardless of channel.transcript (optional, repeatable) — search machine-generated
speech-to-text transcripts (GDELT's asr: operator). Multiple values are
OR'd together. Short phrases only — GDELT caps each at 5 words.caption (optional, repeatable) — search human-provided closed
captioning (GDELT's cap: operator). Multiple values are OR'd together.concept (optional, repeatable) — search Google Knowledge Graph
concepts extracted from captioning, by MID code (GDELT's capnlp:
operator), e.g. /M/0d063v. Multiple values are OR'd together. See
gdelt-tv-concept-entities for GDELT's own
catalog of valid MID codes.onscreen_text (optional, repeatable) — search OCR'd onscreen
text/chyrons (GDELT's ocr: operator). Multiple values are OR'd together.
Short phrases only — GDELT caps each at 5 words.visual (optional, repeatable) — search visual object/activity labels
from computer vision (GDELT's visual: operator), e.g. VOLCANO,
POLICE. Multiple values are OR'd together. See
gdelt-tv-visual-entities for GDELT's own
catalog of valid labels.exclude_transcript (optional, repeatable) — exclude clips whose
speech-to-text transcript matches this value (GDELT's -asr: operator).
Every value must be absent.exclude_caption (optional, repeatable) — exclude clips whose closed
captioning matches this value (GDELT's -cap: operator). Every value
must be absent.exclude_concept (optional, repeatable) — exclude clips whose extracted
concepts match this MID code (GDELT's -capnlp: operator). Every value
must be absent.exclude_onscreen_text (optional, repeatable) — exclude clips whose
OCR'd onscreen text matches this value (GDELT's -ocr: operator). Every
value must be absent.exclude_visual (optional, repeatable) — exclude clips whose visual
labels match this value (GDELT's -visual: operator). Every value must
be absent.station (required) — station to search. Allowed values: CNN,
MSNBC, FOXNEWS, BBCNEWS, KGO (ABC, San Francisco), KPIX (CBS,
San Francisco), KNTV (NBC, San Francisco). See
gdelt-tv-stationdetails for GDELT's own
current list.show (optional) — limit to an exact show name.day_of_week (optional) — limit to a day of week, 0 (Sunday) through
7 (Saturday), PST.timespan (optional) — relative time window ending now, e.g. 1h, 7d,
3m, 1y. Cannot be combined with from/to. Omit both for GDELT's
full archive (auto-resolution, back to July 6, 2010).from (optional) — start of an absolute time window. Accepts
YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be
combined with timespan.to (optional) — end of an absolute time window. Same formats as from.At least one of transcript/caption/concept/onscreen_text/visual is
required in addition to station — GDELT rejects a station-only or
station-plus-show-only query. An exclude_* value does not count as that
positive term; combine exclusion with at least one non-exclude_* field.
Notable response behavior:
words[].count is a percentage relative to the single most frequent
entry (always 100), not a raw occurrence count.limit-style parameter is not offered because GDELT's own
maxrecords is silently ignored for this mode.channel in the response echoes the requested channel.query is the exact upstream query string built from the request
(excluding channel, mode, and format, which route the request but
aren't part of GDELT's own query language).source_url is the exact upstream GDELT Television 2.0 AI API URL used
for the call.400/503 upstream error, not a 200 with
empty/wrong data. A legitimate zero-match query returns 200 with an
empty words array.| Field | Filled in, of 262 checked | Values in the sample |
|---|---|---|
| label | 262 | “Trump” and 261 other values |
| count | 262 | 0.44 to 100, median 0.44 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| channel | string | Yes | Required. Which match channel to build a word cloud from. Allowed values: transcript, caption, concept, onscreen_text, visual. | caption | |
| transcript | array<string> | No | Search machine-generated speech-to-text transcripts (GDELT's asr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words). | climate change | |
| caption | array<string> | No | Search human-provided closed captioning (GDELT's cap: operator). Repeatable; multiple values are OR'd together. | trump | |
| concept | array<string> | No | Search Google Knowledge Graph concepts extracted from captioning, by MID code (GDELT's capnlp: operator). Repeatable; multiple values are OR'd together. | /M/0d063v | |
| onscreen_text | array<string> | No | Search OCR'd onscreen text/chyrons (GDELT's ocr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words). | breaking news | |
| visual | array<string> | No | Search visual object/activity labels from computer vision (GDELT's visual: operator). Repeatable; multiple values are OR'd together. | flood | |
| exclude_transcript | array<string> | No | Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent. | campaign ad | |
| exclude_caption | array<string> | No | Exclude clips whose closed captioning matches this value (GDELT's -cap: operator). Repeatable; every value must be absent. | sanders | |
| exclude_concept | array<string> | No | Exclude clips whose extracted concepts match this MID code (GDELT's -capnlp: operator). Repeatable; every value must be absent. | /M/081pw | |
| exclude_onscreen_text | array<string> | No | Exclude clips whose OCR'd onscreen text matches this value (GDELT's -ocr: operator). Repeatable; every value must be absent. | sponsored | |
| exclude_visual | array<string> | No | Exclude clips whose visual labels match this value (GDELT's -visual: operator). Repeatable; every value must be absent. | advertisement | |
| station | string | Yes | Required. Station to search. Allowed values: CNN, MSNBC, FOXNEWS, BBCNEWS, KGO, KPIX, KNTV. | CNN | |
| show | string | No | Limit to an exact show name. | Inside Politics | |
| day_of_week | string | No | Limit to a day of week, 0 (Sunday) through 7 (Saturday), PST. | 1 | |
| timespan | string | No | Relative time window ending now, e.g. 1h, 7d, 3m, 1y. Cannot be combined with from/to. GDELT's TV archive starts July 6, 2010. | 7d | |
| from | string | No | Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan. | 2026-08-01 | |
| to | string | No | End of an absolute time window. Same formats as from. | 2026-08-19 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/gdelt/tv-wordcloud?channel=caption&station=CNN" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "cap:\"trump\" station:CNN",
"channel": "caption",
"source_url": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=wordcloudcap&query=cap%3A%22trump%22+station%3ACNN",
"fetched_at": "2026-08-20T10:00:00Z",
"words": [
{
"label": "Trump",
"count": 100
},
{
"label": "Donald",
"count": 22.1239
},
{
"label": "President",
"count": 2.2124
}
]
}
}Request schema
No body schema
Response schema
#/definitions/gdelt.tvWordCloudResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | gdelt.TVWordCloudResponse | No | ||||
| data.channel | string | No | caption | |||
| data.fetched_at | string | No | 2026-08-20T10:00:00Z | |||
| data.query | string | No | cap:"trump" station:CNN | |||
| data.source_url | string | No | https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=wordcloudcap&query=cap%3A%22trump%22+station%3ACNN | |||
| data.words | array | No | ||||
| data.words[].count | number | No | 100 | |||
| data.words[].label | string | No | Trump | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/gdelt/tv-wordcloud?channel=caption&station=CNN" \
-H "x-api-key: $CRAWLORA_API_KEY"