Feed status & data sources
Profile
Logout

Feed Status

Loading feed status… Connected = sources with >0 items; Unconnected = sources with 0 items.

Total feeds
—
Expected feed definitions
Connected
—
—
Unconnected
—
Feeds with 0 current items
Average health
—
Load feed health to compute
OpenSanctions pull by dataset
Sanctions
—
`os` feed entities
PEPs
—
`pep` + `pepwatch`
Politicians
—
`politicians` + `politiciansbycountry`
Total OpenSanctions
—
Across tracked datasets

Connected and unconnected feeds
Feed ID Source Data source Items Connected Unconnected Last fetched
Feed detail inspector
Select a feed row to inspect what is being pulled. OpenSanctions rows show schema/topics/datasets flags.

Feed health

Snapshot-based scores (freshness, duplicate titles, parse presence). Same calculation as Pro /api/engine/feed-health. Set ATIL_ENABLE_FEED_HEALTH=0 to disable.

Data sources requiring keys

Sources that need an API key or commercial access. Status is derived from live feed data: Connected = key configured and returning data; Missing = no key or 0 items.

Key-required and commercial sources — current status
Source Feed ID Status Items Notes

Feed visualizer

Sample records per connected feed from the latest snapshot. Use this to sanity-check that feeds are returning logical, well-formed entities.

Sync tracker

Last snapshot update and feed count come from the loaded atil-feed-snapshot-latest.json (or API) — that part reflects the file’s generatedAt and feed keys. New sources are detected by comparing feed IDs to the previous load of this page in this browser (stored in localStorage), not to a server audit log — so it means “new since your last CMS visit,” not necessarily “new since the last server rebuild.”

Snapshot sync log
MetricValue
Last snapshot update—
Feed count—
New feed IDs (vs last CMS visit, this browser)—

Entity DB (append / upsert)

MySQL is the durable store. Ingest never deletes the table — new records are inserted, existing ones updated, and optional tombstones only soft-hide rows missing from a feed pull.

Live entity store
MetricValue
Active entities—
Tombstoned (soft-hidden)—
Total rows (incl. tombstones)—
Distinct feeds in DB—

Product path: map/feed read active MySQL rows only. Use Update feeds → entities or Apply ingest to append/update — prior data is kept. Soft-delete is opt-in.

New API keys: add keys in api-keys.config.js (project root). Then run the pipeline or Rebuild snapshot (merge).

User management

Create CMS users. Only cms-admin can add users.

CMS users
EmailUsernameTierStatusBan

Site traffic

Page-view hits classified by User-Agent as human, generic bot, search/social crawler, or AI crawler (GPTBot, ClaudeBot, PerplexityBot, etc.). API calls and static assets (css/js/images/fonts) are not counted.

Total hits
—
—
Human
—
—
Bots & crawlers
—
—
AI crawlers
—
—
Top bots / crawlers
NameTypeHits
Top pages
PathHits

Conversions from blogs & landers

Signups and CTA clicks attributed to the blog post or landing page (solutions/countries/compare) a visitor first landed on, via a 30-day first-touch cookie set by blog.js / the landing-page templates.

Signups
—
Attributed to blog/lander first touch
CTA clicks
—
"Create a free account" clicks on content pages
Top converting pages
Source pathEventCount

Recent hits

Last 100 recorded hits
TimePathTypeBotIPUser-Agent

Upgrade attempts

Clicks on paid pricing CTAs (Analyst, Regional Pro, Pro Investigation). Captures username and email when the visitor is signed in; anonymous clicks still record the plan.

Total attempts
—
—
With email
—
Signed-in or identified
By plan
PlanClicks
Recent attempts
TimeUsernameEmailPlanIP