EU Pesticide MRL Watchlist Monitor
Pricing
from $10.00 / 1,000 watchlist item checkeds
EU Pesticide MRL Watchlist Monitor
Checks a watchlist of commodity/pesticide-residue pairs against the EU Pesticides Database for MRLs. Reports limit, unit, definition, with change states (FIRST_SEEN, UNCHANGED, LIMIT_CHANGED, DEFINITION_CHANGED, NOT_FOUND). Informational only; Official Journal is authoritative. No personal data.
Pricing
from $10.00 / 1,000 watchlist item checkeds
Rating
0.0
(0)
Developer
Pavel Staurouski
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Checks a watchlist of commodity/pesticide-residue pairs against the European Commission's EU Pesticides Database (food.ec.europa.eu/plants/pesticides/eu-pesticides-database_en) for maximum residue levels (MRLs) under Regulation (EC) No 396/2005.
What you get
One record per watchlist item per run: the current MRL and its unit (mg/kg), whether it is marked "at or below the limit of quantification" (the published "*" suffix), the verbatim residue definition (never a bare CAS number or trade name - some residues are defined as "sum of X, Y and Z, expressed as X", covering metabolites or a whole substance group, and this Actor passes that full definition through exactly as published), the regulation that set the current value and the date it became applicable, and the EU's own previously-published value for that row (which may equal the current one, if a later amendment only reconfirmed it without changing the figure).
Every record also carries an explicit state: FIRST_SEEN, UNCHANGED,
LIMIT_CHANGED, DEFINITION_CHANGED, NOT_FOUND, INVALID_INPUT, or FETCH_ERROR.
A failed fetch always produces an explicit FETCH_ERROR record per watchlist item,
never a silent "no change" - and never touches your previously-saved comparison state,
so the next successful run still compares against the last known-good snapshot.
What it does not do
No legal advice, no compliance certification. The Commission states this database
"is made available solely for the purpose of information. It has no legal value."
The official information is published in the Official Journal of the European Union;
this Actor surfaces that disclaimer rather than overriding it. NOT_FOUND means the
database has no commodity-specific entry for that pair - the EU's generic default MRL
of 0.01 mg/kg (Regulation (EC) No 396/2005, Art. 18(1)(b)) still applies in that case,
this Actor just does not fabricate a row the Commission itself never published.
No personal data: every field traces to a commodity, a residue definition, a
regulation number or a date, never a contact name or signatory.
Why you might need this
A food-testing lab, an importer's supplier-quality team, or a compliance consultant tracking a fixed set of commodity/pesticide pairs needs to know immediately when an MRL tightens, loosens, or the residue definition itself is redefined. Testing a batch against a limit that was lowered last month, because nobody re-ran the Commission's search tool against the growing watchlist, produces a result that reads "pass" against stale data and "fail" (or a border rejection) against the regulation actually in force - not a hypothetical, since amending regulations for a single residue are published several times a year. This Actor turns that manual re-check into a scheduled run instead of a recurring blind spot.
Input
{"watchlist": [{ "commodityName": "Oranges", "residueName": "Glyphosate" },{ "commodityId": 2, "residueId": 8 },{ "commodityName": "Table grapes", "residueName": "Glyphosate" }]}
Each item needs a commodity, given as either commodityId (the database's own
numeric product_id, most reliable) or commodityName (exact, case-insensitive
match). Commodity names are not unique in the source: generic category names like
"Others (2)", "Muscle", "Kidney" or "Lentils" repeat across different hierarchy
branches (confirmed: "Others (2)" alone appears 47 times). An ambiguous name resolves
to INVALID_INPUT with every candidate's numeric id and full breadcrumb listed in
errorMessage, so you can pin the right one. It also needs a residue, given as
either residueId (numeric pest_res_id) or residueName (exact,
case-insensitive match; residue names are confirmed unique, so this is always safe).
Tip: run once with a best-guess name to discover the real id from the error detail,
then switch to commodityId/residueId for faster, unambiguous future runs.
Sample output
{"commodityId": 4,"commodityName": "Oranges","commodityCode": 110020,"commodityPath": "FRUITS, FRESH or FROZEN; TREE NUTS > Citrus fruits > Oranges","residueId": 120,"residueDefinition": "Glyphosate","mrlUnit": "mg/kg","currentMrlRaw": "0.5","currentMrlValue": 0.5,"currentAtOrBelowLoq": false,"currentLegalReference": "Reg. (EU) No 293/2013","currentApplicableDate": "2013-04-06","currentFootnote": null,"previousPublishedMrlRaw": "0.5","previousPublishedMrlValue": 0.5,"previousPublishedLegalReference": "Reg. (EU) No 441/2012","previousPublishedApplicableDate": "2012-06-14","sourceUrl": "https://ec.europa.eu/food/plant/pesticides/eu-pesticides-database/backend/api/pr/get_details_single_pr?pest_res_id=120&lang=en","watchlistItem": { "commodityName": "Oranges", "residueName": "Glyphosate" },"matchState": "UNCHANGED","changedFields": [],"checkedAt": "2026-10-08T12:02:06.828Z","errorMessage": null}
This is a real record from a live run: the current glyphosate MRL on oranges (0.5 mg/kg, set by Reg. (EU) No 293/2013), alongside the previously-published value the Commission itself recorded before that amendment, so you can see at a glance that the figure was reconfirmed rather than changed.
Change tracking across runs
Run this Actor on a schedule. Each watchlist pair's last-seen snapshot (MRL, LOQ marker, legal reference, applicable date, residue definition) is stored per Actor, so every subsequent run reports exactly what changed since the last one, not just the current state.
Pricing
Pay per run started, plus per watchlist item successfully checked against the live
database (resolves to FIRST_SEEN, UNCHANGED, LIMIT_CHANGED, DEFINITION_CHANGED,
or NOT_FOUND). Items that fail to resolve (INVALID_INPUT) or hit a transient fetch
failure (FETCH_ERROR) are never charged. See the Pricing tab for exact rates.