How to Find Journalists by Byline and Beat
Search the journalists directory with /v1/journalists, then open a profile for outlets, coverage stats and recent articles
Written by Tasha Tatum
June 27, 2026
How to find journalists by byline and beat
To look up reporters, call GET /v1/journalists to search the directory by name, then call GET /v1/journalists/:id to open a single profile with the journalist’s outlets, coverage statistics and most recent articles. The directory normalizes bylines by name, so the same reporter writing for several outlets is merged into one record with an outlets array.
curl "https://api.apitube.io/v1/journalists?name=Jane%20Doe&api_key=YOUR_API_KEY"
Send the key as the X-API-Key header instead of the api_key query parameter if you prefer. With no name, the endpoint returns the full directory page by page.
How to search the journalists directory
GET /v1/journalists lists journalists and accepts a name filter that does a partial (substring) match, so name=Jane returns every byline containing “Jane”. Paginate with page (default 1) and per_page (default 100, maximum 250). A per_page above 250 returns HTTP 400 with error ER0171; a non-numeric page returns ER0172 and a non-numeric per_page returns ER0170.
curl "https://api.apitube.io/v1/journalists?name=climate&per_page=50&page=2&api_key=YOUR_API_KEY"
The list response wraps the matches and tells you whether more pages exist:
{
"status": "ok",
"limit": 100,
"page": 1,
"has_next_pages": true,
"results": [
{
"id": 84213,
"name": "Jane Doe",
"outlets": [
{ "id": 512, "name": "The Verge", "domain": "theverge.com" }
],
"outlet_count": 2,
"links": {
"self": "https://api.apitube.io/v1/journalists/84213",
"articles": "https://api.apitube.io/v1/news/everything?author.id=84213"
}
}
]
}
has_next_pages is true when the page comes back full (you received exactly per_page results), which signals there may be more to fetch. outlet_count is the number of outlet records merged into that journalist and appears on the list endpoint only. The links.articles URL is ready to use: it pulls every story under that byline through the author.id filter — see how to filter news by author.
What is in a journalist profile?
GET /v1/journalists/:id returns one journalist’s id, name, the outlets they publish under (each with id, name and domain), a links block, a coverage summary, and recent_articles — up to five full article objects. A missing ID returns HTTP 404 with error ER0151.
curl "https://api.apitube.io/v1/journalists/84213?api_key=YOUR_API_KEY"
The coverage block aggregates everything that journalist has written:
{
"coverage": {
"article_count": 1284,
"first_seen": "2023-02-11",
"last_seen": "2026-06-25",
"sentiment": { "positive": 540, "neutral": 612, "negative": 132 },
"momentum": { "last_30_days": 41, "previous_30_days": 37, "change_pct": 11 },
"timeline": [ { "period": "2026-06-01", "count": 41 } ],
"top_topics": [ { "id": 123, "name": "Artificial Intelligence", "count": 88 } ],
"top_entities": [ { "id": 314, "name": "OpenAI", "count": 57 } ],
"top_countries": [ { "id": 840, "name": "United States", "code": "us", "count": 700 } ],
"top_languages": [ { "id": 1, "name": "English", "code": "en", "count": 1200 } ]
}
}
That is how you read a reporter’s beat: top_topics and top_entities show what they cover most, momentum compares the last 30 days against the previous 30 (change_pct is null when there is no prior activity to compare), and timeline breaks output down by month. Use top_entities the same way you would the article-level entity filter — see how to find news mentioning a person or company.
How to skip the coverage block
Coverage runs several aggregate queries, so when you only need the name, outlets and links, add coverage=false to skip it and get a lighter, faster response:
curl "https://api.apitube.io/v1/journalists/84213?coverage=false&api_key=YOUR_API_KEY"
With coverage=false the profile omits the coverage object while still returning recent_articles.
Common Questions
- How are journalists with the same name handled?
- How do I get every article a journalist wrote?
- Does each directory call count as a request?
- Why are the article bodies in recent_articles cut off?
How are journalists with the same name handled?
The directory merges records by exact name, so one reporter publishing across multiple outlets becomes a single profile with an outlets array. The trade-off is that true namesakes — two different people who share a name — and generic bylines such as “admin” can be merged into one profile. Finer disambiguation is planned for a later release. When you need a precise scope, filter the actual articles by author.id, which targets a single byline record.
How do I get every article a journalist wrote?
Take the id from the directory and pass it to the search endpoint as author.id, exactly the URL given in links.articles: GET /v1/news/everything?author.id=84213. The author.id filter accepts up to three IDs separated by commas with OR logic, so you can pull several bylines at once and combine them with any other search filter.
Does each directory call count as a request?
Yes — a successful /v1/journalists or /v1/journalists/:id call charges one request against your plan. The list endpoint is the exception that helps you: if a search returns zero matches, no request is charged.
Why are the article bodies in recent_articles cut off?
On a free plan or a test key, the article bodies inside recent_articles are truncated to a preview, the same masking applied across the News API. Use a live key on a paid plan to receive the full text. For the complete list of accepted parameters and values, see the official parameters reference.