How to Research a Company or Person for Due Diligence
Pull a subject's full news history, weight credible sources and score its reputation with entity filters
Written by Tasha Tatum
July 3, 2026
How to research a company or person for due diligence
To run due diligence on a company or person with the APITube News API, start from its directory profile — /v1/companies/:id or /v1/people/:id — for a coverage snapshot, then pull the subject’s full news history from /v1/news/everything using organization.name or person.name (or a numeric entity.id), a published_at window, and entity.sentiment.polarity=negative to surface red flags. There is no dedicated “due diligence” endpoint: you assemble the dossier from the shared filter chain and weight it toward credible, verified sources.
curl "https://api.apitube.io/v1/news/everything?organization.name=Wirecard&entity.sentiment.polarity=negative&published_at.start=2018-01-01&published_at.end=2020-12-31" \
-H "X-API-Key: YOUR_API_KEY"
You can pass the key as an X-API-Key header or as the api_key query parameter. The request above returns articles from 2018–2020 that mention the company and carry negative sentiment toward that company specifically.
How do you pull a subject’s news profile first?
Before searching articles, look the subject up in the directory to get a stable identifier and a coverage summary. The /v1/companies list accepts a name search (companies resolve to organization and brand entities); take the numeric id from a result and request the full profile at /v1/companies/:id:
# 1. Find the company and its id
curl "https://api.apitube.io/v1/companies?name=Tesla" -H "X-API-Key: YOUR_API_KEY"
# 2. Pull the full profile for that id
curl "https://api.apitube.io/v1/companies/12345" -H "X-API-Key: YOUR_API_KEY"
The profile call returns the entity’s profile plus a coverage summary and a recent_articles list. Coverage is included by default — pass coverage=false to skip it — and each profile call counts as one request. People work the same way through /v1/people and /v1/people/:id. One caveat for research keys: on the Free plan and on test keys the recent_articles content is masked (placeholder text), so use a live paid key when you need real article bodies. An unknown id returns a 404 with error ER0151.
How do you gather a subject’s full news history?
The profile is a snapshot; a due-diligence review needs the full history. Query /v1/news/everything and pin the subject with organization.name (for a company) or person.name (for an individual), then bound the period with published_at.start and published_at.end. Both dates accept absolute values (2019-06-01) and relative Solr-style values such as NOW-1WEEK or NOW-1MONTH:
curl "https://api.apitube.io/v1/news/everything?person.name=Elizabeth%20Holmes&published_at.start=2015-01-01&sort.by=published_at&sort.order=asc" \
-H "X-API-Key: YOUR_API_KEY"
Names must resolve to a tracked entity. If organization.name or person.name returns a not found error (ER0220 for organizations, ER0216 for people), the spelling did not match — grab the numeric entity.id from the directory step and filter by that instead, since ids do not depend on exact spelling. entity.id takes up to three comma-separated ids. Sorting oldest-first with sort.by=published_at&sort.order=asc gives you a chronological timeline, which is what a background check usually wants.
How do you surface negative coverage and red flags?
Two different sentiment filters matter here, and mixing them up gives wrong results. entity.sentiment.polarity=negative scores the tone toward the subject itself, so you catch negative mentions of one company even inside a broadly neutral article. sentiment.overall.polarity=negative scores the whole article’s tone instead. For reputation screening, entity.sentiment is the sharper tool:
curl "https://api.apitube.io/v1/news/everything?organization.name=Boeing&entity.sentiment.polarity=negative&published_at.start=NOW-1MONTH" \
-H "X-API-Key: YOUR_API_KEY"
Both accept positive, negative and neutral. To grade intensity rather than direction, add entity.sentiment.score.min and entity.sentiment.score.max — a number from -1 to 1 — so entity.sentiment.score.max=-0.5 keeps only strongly negative coverage. The full behaviour is covered in how to get sentiment toward a company or person.
How do you weight credible, verified sources?
Due-diligence findings are only as trustworthy as the outlets that published them, so filter out low-quality sources before you read. is_verified_source=1 keeps only articles from higher-ranked, non-duplicate sources, and source.rank.opr.min sets a floor on the Open Page Rank (a 0–10 authority score) so you can demand established publishers:
curl "https://api.apitube.io/v1/news/everything?organization.name=FTX&is_verified_source=1&source.rank.opr.min=6&sort.by=trust" \
-H "X-API-Key: YOUR_API_KEY"
Adding sort.by=trust ranks the surviving articles by credibility, so the most reliable reporting rises to the top — see how to sort news by controversy, trust and social shares. For a stricter cut, is_high_quality=1 keeps only non-duplicate articles from ranked sources that also carry images and a named author. More options are in how to filter for high-quality, verified sources.
How do you measure exposure without downloading everything?
To size up how much has been written about a subject — for a risk score or a first pass — call /v1/news/count. It runs the exact same filters as the search but returns only a total, so it is fast and cheap (one point per call) and never loads article bodies:
curl "https://api.apitube.io/v1/news/count?organization.name=Theranos&entity.sentiment.polarity=negative" \
-H "X-API-Key: YOUR_API_KEY"
The response is a small object — { "status": "ok", "count": 1234, "request_id": "..." }. Compare the negative-sentiment count against the total count to get a quick “share of bad news” ratio for the subject. Details are in how to count news articles without downloading them.
How do you export the dossier?
Once the filters are right, export the matching articles for the file. Add export=csv or export=xlsx to turn any search into a spreadsheet a compliance team can review offline:
curl "https://api.apitube.io/v1/news/everything?person.name=Sam%20Bankman-Fried&entity.sentiment.polarity=negative&per_page=250&export=csv&fl=id,title,source.domain,published_at,sentiment.overall.polarity" \
-H "X-API-Key: YOUR_API_KEY" -o dossier.csv
per_page defaults to 100 and maxes out at 250; walk deeper with page. On the Free plan, paging stops after the first 5 pages, so use a paid plan for a full sweep. Trim each row to the fields you need with fl (a comma-separated list) to keep the export small. See how to export news to CSV or Excel.
Common Questions
- Is there a dedicated due-diligence endpoint?
- How do I track sentiment about the subject specifically?
- What if the company or person name does not resolve?
- Why is the article content in a profile masked?
Is there a dedicated due-diligence endpoint?
No. Due diligence uses the same /v1/news/everything search and the same organization.name, person.name, entity.id, entity.sentiment.*, published_at, is_verified_source and source.rank.opr.min filters as any other subject. The directory endpoints /v1/companies/:id and /v1/people/:id add a profile and coverage summary on top, but you define what “due diligence” means with those filters — there is no separate route.
How do I track sentiment about the subject specifically?
Use entity.sentiment.polarity, not sentiment.overall.polarity. entity.sentiment scores tone toward the entity you pinned (the company or person), so you catch negative coverage about that one subject even inside an otherwise neutral article. sentiment.overall scores the whole article’s tone. For intensity, narrow with entity.sentiment.score.min / entity.sentiment.score.max on the −1 to 1 scale.
What if the company or person name does not resolve?
organization.name and person.name are matched against tracked entities, so a name that does not match returns a 400 error (ER0220 for organizations, ER0216 for people). Look the subject up first with /v1/companies or /v1/people, take the numeric id, and filter by entity.id instead — ids are stable and do not depend on spelling or punctuation.
Why is the article content in a profile masked?
On the Free plan and on test keys, the recent_articles returned by /v1/companies/:id and /v1/people/:id (and article bodies across search) are truncated to placeholder text as a preview. This is a plan/key restriction, not a data gap — switch to a live paid key to read full article content in your dossier. The full parameter list lives in the News API parameters reference.