Research Evidence Radar
Pricing
from $3.00 / 1,000 paper returned no changes
Research Evidence Radar
Tracks a paper's real lifecycle across arXiv, bioRxiv/medRxiv, Crossref, OpenAlex and PubMed — preprint to peer-reviewed to published — and flags retractions urgently. Agent-consumable evidence infrastructure, not a static paper list.
Pricing
from $3.00 / 1,000 paper returned no changes
Rating
0.0
(0)
Developer
joseph fadero
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
"This preprint was published in March, peer-reviewed in June and substantially revised in July" — the Evidence Evolution example from the source research behind this actor. Existing scraper-style research actors return a static list of papers matching a search term. This actor tracks the same underlying evidence across its real lifecycle — preprint → peer-reviewed → published — merges the same paper across sources instead of double-counting it, and flags retractions urgently.
Built for AI agents, not just humans reading a list
This is explicitly agent-consumable evidence infrastructure, tying into this account's broader x402/agent-native positioning. An AI research agent asking "what's the current state of evidence on X, and has anything been retracted" gets a structured, entity-resolved, stage-aware answer here — not a page of search results it has to de-duplicate and interpret itself. isRetraction and stageChangedSinceLastRun are deliberately reliable, structured booleans rather than something an agent has to infer from prose, because — per the PRD's own instruction — a retraction flagged late is a genuine credibility problem for anyone (human or agent) relying on this feed.
All 6 sources are real; one is real but unreliable without a paid key
| Source | Real access | Role |
|---|---|---|
openalex | Keyless REST API | Backbone. Does its own real cross-source entity resolution (confirmed live: "Attention Is All You Need" resolved to 11 real merged locations across arXiv + accepted-version records under one work), a real is_retracted boolean (confirmed accurate against the Wakefield MMR-autism retraction), real cited_by_count. |
arxiv | Keyless Atom API | Freshest real-time preprint discovery — arXiv's own API can be ahead of OpenAlex's indexing. |
crossref | Keyless REST API | Published-DOI metadata, real citation count (is-referenced-by-count). |
pubmed | Keyless E-utilities API | Biomedical coverage; real pubtype field can directly say "Retracted Publication." |
biorxiv / medrxiv | Keyless REST API | Biomedical preprints — confirmed to be a clean real JSON API despite the PRD's own expectation this would be more scraping-dependent (a positive scope finding). Real bonus: a genuine published field cross-referencing the paper's own later published DOI once one exists. |
semantic_scholar | Real API, but keyless/anonymous access shares a global rate-limit pool that was exhausted on every live test during this build (repeated HTTP 429, several seconds apart, even after backoff). Handled with one retry then a clean failure record — not treated as a primary source, since OpenAlex already provides a real citation count without this reliability problem. |
Entity resolution — validated against a real, verified preprint→published pair
The PRD's core differentiator ("don't double-count a preprint and its later published version as two separate records") is handled two ways, confirmed live:
- OpenAlex does its own real merging natively — used as-is for anything queried through OpenAlex.
- This actor's own merge (
entityResolver.ts) for records fetched directly from other sources: exact-DOI grouping (the same real identity appearing from two sources), plus a source's own real cross-reference to a different DOI representing a later stage — bioRxiv/medRxiv's realpublishedfield is the clearest case.
Concrete validation, not a hypothetical: a real bioRxiv preprint (DOI 10.1101/2023.12.31.573522, "Synaptic connectivity and electrophysiological properties of the nucleus of the lateral olfactory tract") carries a real published cross-reference to its own later published version in The Journal of Neuroscience (DOI 10.1523/JNEUROSCI.2420-23.2024, confirmed live via Crossref). Fed both real records through the resolver: result was one merged record, stage: "published", sources: ["biorxiv", "crossref"], with the published DOI's own URL as the canonical sourceUrl — not two separate papers.
A real bug caught during this validation: the merge initially picked whichever source's record had the fuller abstract as the "canonical" one for every field, including sourceUrl — which pointed the merged record at the preprint instead of the published version whenever the preprint happened to have richer text. Fixed by tracking "richest record" (for abstract/citations/topics) and "highest-stage record" (for the canonical URL) as two separate things, not one.
Publication stage — how it's actually derived
- OpenAlex records: from real per-location
version/is_publishedfields (publishedVersionoris_published: true→ published;acceptedVersion→ peer_reviewed; else → preprint). - Crossref records:
type: "posted-content"→ preprint; everything else (journal-article, proceedings-article) → published, since Crossref is fundamentally a published-DOI registry. - PubMed records: always
published— PubMed indexes formally published biomedical literature. - arXiv / bioRxiv / medRxiv records: always
preprinton their own — upgraded topublishedonly via the entity resolver's cross-reference merge described above.
stageChangedSinceLastRun/previousStage track stage across runs (via the same deltaStore.ts this program has reused since Actor 26), which is a different mechanism from the entity resolver's same-run cross-source merge — validated separately: seeded a known paper's stored stage as preprint, re-ran, confirmed the pipeline correctly reported previousStage: "preprint", publicationStage: "published", stageChangedSinceLastRun: true.
Retraction detection — real, tested against a known real case
No single source's retraction signal was trusted blindly — each was checked live:
- OpenAlex's
is_retracted: confirmed accurate against the Wakefield MMR-autism paper (DOI10.1016/S0140-6736(97)11096-0) — trusted directly. - Crossref's structured
update-to/relationfields: confirmed empty in every real retracted record checked, including the same Wakefield paper (whose title literally starts "RETRACTED:"). The structured field exists in Crossref's schema but isn't populated in practice for retractions — so retraction detection here is title-prefix keyword matching instead, the real reliable signal. - PubMed's
pubtype: can genuinely include "Retracted Publication" — used directly when present. - arXiv: withdrawn papers conventionally start their abstract "This paper has been withdrawn" — arXiv's own real convention, not a structured field, matched by keyword.
Live end-to-end test: looked up the Wakefield DOI through the full pipeline (not just the raw source) — isRetraction: true came through correctly in the actor's own output.
Modes
| Mode | Behavior |
|---|---|
topic_monitor | Broad keyword search across selected sources |
paper_lookup | Each topics entry is treated as a specific identifier (DOI, arXiv ID, or exact title) rather than a keyword — a direct lookup, not a search |
The input schema has one topics field shared by both modes, per the original spec — the mode determines how its entries are interpreted, documented here rather than left ambiguous.
abstractSummary — real source text, not a generated summary
Same honesty convention as this program's other actors with a "summary" field: abstractSummary is each source's own real abstract text (OpenAlex's is left empty here since it returns an inverted index rather than plain text, and other sources in the same result set already provide real plain-text abstracts in practice) — not an LLM-generated summary. No actor in this program has wired in an external LLM API.
Output schema
{"paperId": "string","title": "string","authors": ["string"],"source": "string","publicationStage": "preprint | peer_reviewed | published","previousStage": "string | null","stageChangedSinceLastRun": "boolean","isRetraction": "boolean","citationCount": "number | null","topics": ["string"],"abstractSummary": "string","sourceUrl": "string","checkedAt": "ISO timestamp","fetchStatus": "success | failed","errorMessage": "string | null"}
citationCount is null where a source genuinely doesn't expose one (PubMed's esummary, arXiv) rather than guessed — OpenAlex/Crossref/Semantic Scholar provide real counts when available.
Setup note
No browser needed — all 6 sources work over plain HTTP (JSON/XML/Atom). bioRxiv/medRxiv have no free-text search endpoint, only date-range and DOI-based lookups — topic_monitor fetches a recent 21-day window and filters client-side by keyword match, an honest workaround for a real API limitation, not a claim of true server-side search on those two sources specifically.
Shared "Radar" architecture
- Diff:
src/shared/deltaStore.ts— the same module from Actor 26, reused unmodified across 7 actors now (26, 27, 34, 35, 37, 38, and here), storing each resolved paper'spublicationStage. - Classify/resolve: real structured signals trusted first (OpenAlex's
is_retracted, PubMed'spubtype), keyword fallback second and labeled as such — the same honesty discipline as every prior Radar actor.
Pricing
| Event | Price |
|---|---|
| Run started | £0.05 |
| Reading success | £0.06 |
| Fetch failed | free |
n8n integration
- Workflow A (trigger): scheduled weekly run against a watched topic list, logging all new and stage-changed papers to a tracking sheet.
- Workflow B (processing): immediate alert on any
isRetraction: trueregardless of topic priority; routine stage advancements logged for a periodic digest.