Build a PR media list from real worldwide news coverage

By General Input

Search three months of global coverage on your topic, rank the outlets actually writing about it, and draft a tailored pitch for each one.

Integrations

  • GDELT
  • Google Sheets
  • Gmail

Type

App

Categories

  • Marketing
  • Sales

Build me a media list workbench for PR outreach. It is an app I open at the start of a campaign, and it replaces the spreadsheet ritual of hunting down who recently covered my topic, noting the outlet and their latest story, then pitching them. It uses GDELT for the news data, Google Sheets as the shared source of truth for the finished list, and Gmail for pitch drafts. GDELT needs no credentials, so the only connections I make are Google Sheets and Gmail.

The main screen is a search bar where I type a topic or beat, for example industrial robotics or restaurant tech funding, with optional filters for source country and source language. Searching calls the GDELT Search News Articles (DOC 2.0) operation across the last three months of worldwide coverage and rolls the results up by publication using the source domain on each article. GDELT query operators all live inside a single query string, so my country and language filters become sourcecountry: and sourcelang: terms appended to the keywords rather than separate parameters, and the handler should request the maximum article records the list mode allows so the rollup has enough to work with.

The rollup renders as a ranked table of outlets. Each row shows the publication, how many stories it ran on the topic, the date of its most recent story, the average sentiment of its coverage, and its country and language. Rank by story count by default and let me re-sort by recency or sentiment. Next to the table, show a coverage mix panel built from the GDELT Coverage Breakdown by Language or Source Country (DOC 2.0) operation, so I can see at a glance which languages and countries the conversation is happening in and decide where to concentrate.

Clicking an outlet opens a detail panel for that publication. It lists that outlet's actual articles on my topic, fetched with another Search News Articles call scoped by a domain: operator for that publication, each with headline, date, tone, and a link. Beneath that, show the exact sentences where my keywords appeared using the GDELT Context Snippet Search (Context 2.0) operation, also scoped to the domain. Label that section clearly as recent examples, because the Context API only covers the last 72 hours and returns at most one matching sentence per article. The whole point of this panel is that I can see the angle a publication takes before I pitch it.

Every row has a checkbox that adds the outlet to a saved target list which persists in the app across sessions. The target list is its own view with columns I control: tier, status, contact email, and notes. Tier and status are mine to set, with sensible defaults such as Tier 1, Tier 2, and Tier 3 for tier, and Not started, Researching, Pitched, Replied, and Passed for status. GDELT gives me outlets and articles, not individual reporter email addresses, so the contact email is a field I paste in myself, and the pitch action should require it before it will run.

Bake in the practical rules from how good lists actually get built. A focused list beats a mass list, so nudge me toward 15 to 30 target outlets per campaign and warn me once the list runs past 30 rather than blocking me. Media contacts go stale fast, so flag any outlet with no coverage of my topic in the last 30 days as going cold, using the most recent story date already in the rollup. And nothing ever sends on its own: every pitch stops at a draft I review.

The target list has an Export list action. It writes the whole list, one row per outlet with all my columns, to a tab in a Google Sheets spreadsheet I choose using the Append Values operation, then reads that tab back with the Get Values operation and shows me what is now in the sheet plus the time of the last sync. The sheet is the shared source of truth for the team, so the read-back matters as much as the write.

Each outlet also has a Draft pitch action, and that one kicks off a background agent inside the app. The agent takes the outlet and my topic, searches that outlet's recent coverage of the topic in GDELT, reads what they actually published and the angle they took, then writes a tailored pitch that references the specific stories they ran instead of generic flattery. It creates the email in Gmail with the Create a Draft operation, addressed to the contact email on that row, and it never sends. While it works, show a running status on the row, and when it finishes show that a draft exists, the subject line and pitch text it produced, and a link to open the draft in Gmail.

One practical note: GDELT throttles bursty clients, so keep the news calls serial rather than parallel and cache each search result set in the app, so clicking between outlets in the table does not re-run the same query.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageWin back LiveChat visitors whose chats went unansweredLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to Loops