ECHA REACH Lookup – SVHC, Annex XIV & XVII Status avatar

ECHA REACH Lookup – SVHC, Annex XIV & XVII Status

Pricing

from $170.00 / 1,000 substance looked ups

Go to Apify Store
ECHA REACH Lookup – SVHC, Annex XIV & XVII Status

ECHA REACH Lookup – SVHC, Annex XIV & XVII Status

REACH substance lookup on ECHA CHEM: CAS number, EC number or name in; registration status, SVHC candidate list inclusion with date and reason, Annex XIV and Annex XVII status and harmonised classification out. Monitor mode reports every Candidate List addition on its next run.

Pricing

from $170.00 / 1,000 substance looked ups

Rating

0.0

(0)

Developer

Leyten Data

Leyten Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Security

Limited permissions

Share

What does ECHA REACH Lookup do?

REACH substance lookup with SVHC candidate list status for manufacturers, importers, regulatory affairs and product compliance teams: look up any substance on ECHA CHEM by CAS number, EC number or name and get, in one record, its REACH registration status, whether it is on the Candidate List of substances of very high concern and since when, its Authorisation List (Annex XIV) and Restriction List (Annex XVII) status, and its harmonised classification (CLP Annex VI). Switch to monitor mode, schedule it daily, and a Candidate List addition reaches you on the first run after ECHA publishes it, per substance and per list, with the reason for inclusion.

A missed Candidate List addition is a breach of the information duty

ECHA adds substances to the Candidate List on a few dates a year: twice a year in most years from 2011 to 2023, three times in 2024 and in 2025 (28 October 2008 to 4 February 2026: 253 entries). Each addition starts legal clocks for everyone who makes, imports or sells articles containing that substance above 0.1% weight by weight:

  • Article 33 REACH: suppliers of such articles must give their customers enough information for safe use, at least the name of the substance, immediately after the inclusion; consumers may ask for it and must be answered within 45 days.
  • Article 7(2) REACH: producers and importers of such articles must notify ECHA within six months if the substance is present above one tonne per year.
  • Article 9(1)(i) of the Waste Framework Directive: suppliers of such articles must notify them in ECHA's SCIP database.
  • Article 31 REACH: safety data sheets must mention the inclusion; downstream users receive updated SDSs.

Nobody sends a letter. ECHA publishes the update on its website and the obligations apply from that day. A company that learns of an inclusion at the next annual review has been out of compliance for months.

This Actor does two things about that: it answers, for any substance, what is its status today, and it watches the lists so that what changed arrives as a dataset item and a webhook POST on the first run after ECHA publishes it, which on a daily schedule is within a day.

Monitor mode: the lists, and your substances

Set mode to monitor, choose the lists to follow, add the substances of your portfolio, and schedule the task (daily is right for the Candidate List; every inclusion date on it, from 2008 to February 2026, is a weekday).

  • The first run records a baseline of every entry of the followed lists and the current status of every watched substance. Baseline entries are delivered as baseline records so you can see what is being watched; they are free. Each watched substance is looked up once, at the lookup price.
  • Every later run delivers only what changed: a substance added to a followed list (with its date of inclusion and reasons), an entry that changed (a sunset date, a group entry that gained members, a restriction amended) or one that was removed, and a watched substance whose status changed (it entered the Candidate List, got an Annex XIV entry, became restricted, lost its registration, gained a harmonised classification). A run in which nothing changed costs the start fee only.
  • The summary of each change is written for a compliance inbox: n-hexane (110-54-3): now on the Candidate List (included 2026-02-04; Specific target organ toxicity after repeated exposure (Article 57(f) - human health)).
  • The webhookUrl receives a POST with the run's summary and the changes. Point it at your ticketing system, Slack or an e-mail bridge.

Followed lists:

KeyListECHA CHEM page
candidateListCandidate List of substances of very high concern (SVHC)https://chem.echa.europa.eu/obligation-lists/candidateList
authorisationListAuthorisation List (REACH Annex XIV)https://chem.echa.europa.eu/obligation-lists/authorisationList
restrictionListRestriction List (REACH Annex XVII)https://chem.echa.europa.eu/obligation-lists/restrictionList

Sources

Everything comes from ECHA CHEM (chem.echa.europa.eu), the European Chemicals Agency's chemicals database, through the same JSON interface its own web application uses: substance search, the regulatory lists, per-substance obligations, harmonised classifications and REACH registration dossiers. There is no full-database download for these lists, and ECHA's legal notice prohibits systematic copies of its databases; this Actor makes only the requests needed for your lookups and pages through a followed list once per run, paced at four requests per second.

  • Reuse of ECHA data is permitted for commercial purposes with attribution. Records delivered by this Actor should carry: Source: European Chemicals Agency, https://echa.europa.eu/.
  • CAS Registry Numbers are the property of the American Chemical Society; ECHA provides them so that regulatory requirements can be fulfilled, which is what this Actor uses them for.
  • SCIP (the database of articles containing Candidate List substances) is not included: ECHA offers no interface to it. The Actor tells you that a substance requires a SCIP notification; it does not read SCIP.
  • ECHA CHEM also holds the EUCLEF cross-references to other EU legislation; they are counted (otherLegislationReferences) but not delivered, as their terms exclude resale.

Features

  • SVHC candidate list check per substance: listed or not, direct or group entry, date of inclusion and Article 57 reasons
  • Authorisation List (Annex XIV) status with sunset date, latest application date and remarks
  • Restriction List (Annex XVII) entries that cover the substance directly or through a group, with the amending regulation and the link to the conditions
  • REACH registration status: active and inactive dossiers, full versus intermediate registrations, tonnage band, latest update
  • Harmonised classification (CLP Annex VI): hazard classes, H-statements, signal word, pictograms and a cmrCategory1 flag
  • CAS and EC number check-digit validation before anything is searched, and exact-name matching so a lookup never returns the wrong substance
  • Candidate List monitor: every addition, change or removal on the followed lists, delivered by the first run after ECHA publishes it, with a webhook
  • Live from ECHA CHEM: every field is what ECHA says at the moment of the run, never a copy
  • Runs through the Apify API, on a schedule, or from Make, Zapier and n8n

Use cases

Manufacturers and importers of articles: the Article 33 check

Put the substances of your bill of materials (CAS numbers from the supplier declarations) in substances, run once for the current picture, then switch the task to monitor mode and schedule it. candidateList.listed with dateOfInclusion is the Article 33 trigger; restrictionList.entries tells you whether an article may be placed on the market at all; authorisationList.sunsetDate is the day a use without authorisation becomes illegal.

Regulatory affairs: portfolio screening

A thousand substances cost $200. ECHA CHEM is asked at four requests per second, and a substance costs about four requests when it is on no list and about nine when it is (the candidate-list entry, the restriction entry and the harmonised classification are each read separately), so 1,000 substances take at least 1,000 x 4 / 4 = 1,000 seconds, about 17 minutes, and at least about 2,250 seconds, about 38 minutes, when all are listed; slow answers and retries add to that. The most maxSubstancesPerRun allows, 10,000, takes at least 10,000 seconds of lookups, and the run also needs a tenth of a second per substance to deliver the records (1,000 seconds), the 10 seconds a lookup needs at least to start and up to two minutes to save its state (see Output): at least 11,130 seconds, about 3.1 hours, and at least about 23,630 seconds, about 6.6 hours, when all are listed. The default run timeout of 8 hours covers that at up to about eleven requests per substance on average, as many as a listed substance looked up by name takes at the default maxSearchPages; give a list of names with a higher maxSearchPages, or a run in which ECHA CHEM answers slowly, a longer timeout in the run options. With less, the substances the run did not reach come back free as lookup-failed. Looking a substance up by name costs up to two more requests at the default maxSearchPages of 3, because up to three pages of search results are read instead of one. Sort the dataset by harmonisedClassification.cmrCategory1, candidateList.listed and registration.status and you have the substitution shortlist and the list of substances whose registrations are inactive (a supplier whose registration lapsed cannot lawfully supply above one tonne).

Product compliance and PLM software

Call the Actor from your backend when a new material is created, and store the record with the material:

// npm install apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('lwsdjfls/echa-reach-svhc-lookup').call({ substances: ['117-81-7', 'EC 203-777-6', 'Bisphenol A'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems({ clean: true });
for (const { payload } of items) {
if (payload.status !== 'found') { console.warn(payload.input, payload.status, payload.statusReason); continue; }
const flags = [
payload.candidateList.listed && `SVHC since ${payload.candidateList.dateOfInclusion}`,
payload.authorisationList.listed && `Annex XIV, sunset ${payload.authorisationList.sunsetDate}`,
payload.restrictionList.listed && `Annex XVII entry ${payload.restrictionList.entries.map((e) => e.entryNumber).join('/')}`,
payload.harmonisedClassification?.cmrCategory1 && 'CMR 1A/1B',
].filter(Boolean);
console.log(`${payload.substance.name} (${payload.substance.casNumber}): ${flags.join('; ') || 'no listing'}`);
}

Distributors and e-commerce: restricted substances in consumer articles

Annex XVII limits what may be in toys, textiles, jewellery, packaging and consumer mixtures. Look up the substances your suppliers declare and act on restrictionList.entries; each entry links to the conditions in EUR-Lex.

How to use it

  1. Keep Mode on lookup and paste what your suppliers gave you into Substances: CAS numbers, EC numbers or plain substance names, mixed freely. A bill of materials pasted as one column per line is the normal starting point. Each entry becomes one record, including the ones ECHA does not know.
  2. Read the substances view. Per substance you get registration status, whether it sits on the Candidate List with the date and the reason it was added, its Annex XIV authorisation and Annex XVII restriction status, and the harmonised classification when Include harmonised classification is on.
  3. Switch Mode to monitor, give it a State key and schedule it. The Candidate List is updated in batches, two or three times a year recently and not on a fixed date, and the obligation to inform your customers starts the day a substance is added. A scheduled monitor with a webhook tells you on its next run instead of at your next manual review. A run delivers at most maxChangesPerRun changes (25 by default); the rest are not lost, the following run delivers them, so raise it before a batch update if you want a whole batch in one run.

The changes view is what a monitor produces, and listEntries is the list itself if you would rather hold a copy. A substance whose lookup ECHA CHEM does not complete (a request that fails, times out or returns an unexpected format) is delivered as lookup-failed, free and without substance fields, rather than as a partial record; run it again later (a monitor keeps the substance's last recorded state instead).

Know where the answer stops. This reports what ECHA CHEM publishes about a substance. It does not know your product, your concentrations or your tonnage, so it cannot tell you whether an article of yours crosses the 0.1 percent threshold or whether you need an authorisation. It gives a compliance team the regulatory status per substance, quickly and with the dates attached, and the assessment stays theirs.

{
"mode": "lookup",
"substances": ["117-81-7", "EC 203-777-6", "Bisphenol A"],
"includeClassification": true
}

Input

FieldWhat it doesExample
modelookup delivers every substance on every run; monitor records a baseline and later delivers only changes."lookup"
substancesOne per line: a CAS number, an EC number (204-211-0 or EC 204-211-0) or a substance name. Numbers are check-digit validated; names must equal a name ECHA knows. Lookups that find nothing are free, so they share an allowance of 1,000 requests per run, retries included, plus maxSearchPages per substance found: a lookup starts only while its search requests (one per CAS or EC number, up to maxSearchPages per name) still fit next to those of the lookups in progress, which can take a run past the allowance with their retries and, when they fail, the requests after their search. The substances that do not fit are logged as not looked up. CAS and EC numbers are looked up, and listed, before names.["117-81-7", "EC 203-777-6", "Bisphenol A"]
listsRegulatory lists whose entries are followed in monitor mode.["candidateList", "authorisationList", "restrictionList"]
includeClassificationAdds the harmonised classification and labelling (CLP Annex VI).true
includeRegistrationsAdds the REACH registration status.true
maxSearchPagesHow many pages of 100 search results are scanned for an exact name match ("Bisphenol A" is on page 2).3
maxSubstancesPerRunCaps the charged lookups in one run. In lookup mode a run also starts at most twice this many lookups, because unknown numbers and unmatched names are free but still take requests; the rest is logged as not looked up. A run also stops starting lookups when its timeout nears (see Output), so raise the timeout for long lists.1000
maxChangesPerRunMonitor mode: caps the charged changes in one run. When more change at once, delivery stops at the cap and the rest follows in the next runs.25
maxConcurrencySubstances looked up at the same time; requests to ECHA CHEM are paced at 4 per second regardless.3
webhookUrlReceives a POST with a summary after each run that delivered results or changes; must be a public http(s) address and is stored encrypted.https://hooks.example.com/reach
stateKeySeparates independent monitors. Defaults to the task ID, so each saved task keeps its own baseline.portfolio-2026
{
"substances": ["117-81-7", "EC 203-777-6", "Bisphenol A", "7439-92-1"],
"includeClassification": true,
"includeRegistrations": true
}

A CAS number (117-81-7), an EC number (204-211-0 or EC 204-211-0) or a name, one per line. Numbers are validated against their check digit before anything is searched, because a mistyped CAS number silently finds a different substance. Names must equal a name ECHA holds for exactly one substance (ECHA's own search puts "Bisphenol A" on page 2 of its 225 results; the Actor scans the pages and picks the record that carries the name). When several records carry the name, the result is ambiguous, the candidates are listed with their CAS numbers, and nothing is charged.

Monitor mode:

{
"mode": "monitor",
"lists": ["candidateList", "authorisationList", "restrictionList"],
"substances": ["117-81-7", "110-54-3", "80-05-7", "7439-92-1"],
"webhookUrl": "https://hooks.example.com/reach"
}

Output

One record per substance, CAS and EC numbers first, then names. In monitor mode, one record per change (changeType added, changed or removed) with structured changes and a summary. For a watched substance, a change in its registration status or tonnage band is reported as a change; a change in its dossier counts, joint submission, latest dossier update, synonyms or otherLegislationReferences is not. When ECHA CHEM does not answer a page of a followed list after four attempts, the run asks for it again with random pauses of up to 5, 10, 20, 40 and then 60 seconds, for at most ten minutes and not beyond the run's timeout; a run waits like this once, for the first page that needs it, so a short outage at the start of a monitor run is waited out instead of failing the run. A monitor run that could read none of its followed lists and watched substances because ECHA CHEM did not answer ends as failed, charges for no substance and no change, and keeps the recorded state, so the next run still reports every change since the last successful one. A watched number with a wrong check digit needs no answer from ECHA CHEM, so with one in the list such a run can end as partial instead. A spending limit too low for the first lookup ends the run as partial: it looks up, charges and records nothing, and its status message counts the substances not processed.

  • status: found, not-found (ECHA CHEM has no substance under that number, or its search returns nothing for that name), ambiguous (the name does not point to one record: either several records carry it and none ranks above the others, and up to ten are listed, or none carries it exactly, and up to five of the closest search results are listed; use the CAS or EC number), invalid-identifier (wrong CAS or EC check digit) or lookup-failed (ECHA CHEM did not answer completely, or had stopped answering before the substance was looked up, or the run's timeout was near; nothing charged)
  • substance: ECHA's identity of the record: name, EC number, CAS number, other CAS numbers ECHA associates with it, IUPAC name, molecular formula, CLP index number, synonyms
  • registration: registered, inactive-registrations-only (ECHA holds dossiers but none is active, so supplying above one tonne per year is not allowed: "no data, no market") or not-registered, with the number of active and inactive dossiers, full (Article 10) versus intermediate (Article 17/18) registrations, joint submission, tonnage band and the date of the latest dossier update
  • candidateList: listed yes/no, direct entry or group entry, the entry's name, date of inclusion and reasons (Article 57 criteria: CMR, PBT, vPvB, endocrine disruption, equivalent concern)
  • authorisationList: listed yes/no, Annex XIV entry number, sunset date, latest application date, reasons and the entry's remarks (exempted uses, transitional arrangements)
  • restrictionList: every Annex XVII entry that covers the substance, directly or through a group (the phthalates, the PFAS, the CMR entries), with the entry number, the amending regulation and the link to its conditions
  • harmonisedClassification: index number, hazard classes and categories (Repr. 1B, Carc. 1A, STOT RE 1), H-statements, signal word, pictograms, the ATP that set them, the date they apply from, and cmrCategory1 (true for a category 1A/1B CMR)
  • otherProcesses: further ECHA processes the substance is in (substance evaluation under CoRAP, PIC, biocides, POPs, Drinking Water Directive) and the number of other EU legislation references ECHA holds for it
  • sourceUrl to the ECHA CHEM record, and sourceCheckedAt

A run stops starting lookups before its timeout, so that it delivers what it has instead of timing out with nothing delivered. The default run timeout is 8 hours, enough for the 10,000 substances maxSubstancesPerRun allows at about nine requests each (a substance on a list, looked up by its CAS or EC number); a caller can set another timeout in the run options. The time the lookups may use is the time left, less a margin to save the run's state (at most two minutes) and a tenth of a second for every record the run may deliver: a lookup starts only while that is at least 10 seconds, and its requests are cut short to end within it (an attempt still gets at least 10 seconds, which the margin covers), so not even a lookup ECHA CHEM does not answer can take the time the delivery needs. A run whose lookups and their delivery fit in its timeout does exactly what it does without one. In lookup mode each substance the run may still look up counts, up to the twice maxSubstancesPerRun lookups a run may start, and so does each number with a wrong check digit, since each is delivered either way; a substance handled without a lookup counts as one of those lookups, and the substances beyond them are logged as not looked up. In monitor mode the records of a list or watched substance recorded for the first time all count, and the other records count up to maxChangesPerRun, where delivery stops. In lookup mode the substances it did not reach, and a lookup it had to cut short, are delivered free with status lookup-failed and a statusReason that says the run's time limit was near: run just those again with a longer timeout in the run options, or in smaller batches. When the time left does not cover even a free record for each of them, the last ones of the list get no record at all, and the log says how many. In monitor mode a watched substance it did not reach, or whose lookup it cut short, keeps its recorded state and costs nothing, and the next run starts with the watched substances checked longest ago, those never recorded first (CAS and EC numbers still before names). That order moves on only when a run saves its state, which it does when something changed or a substance was recorded for the first time, and otherwise once 24 hours have passed since the last save: a run in between looks up the same substances again. On a daily schedule a list too long for one run is therefore checked in turn, moving on every day or every other day, depending on whether a run starts a full 24 hours after the last save or a little sooner. Such a run ends as partial, and its status message counts the substances not processed and why.

Every field comes from ECHA CHEM at the moment of the run, not from a copy: the answer for a substance is what ECHA says right now.

{
"envelopeVersion": 1,
"id": "cas:117-81-7",
"scope": "lookup:cas:117-81-7",
"changeType": "added",
"sourceUrl": "https://chem.echa.europa.eu/100.003.829",
"scrapedAt": "2026-09-15T12:00:00.000Z",
"firstSeenAt": "2026-09-15T12:00:00.000Z",
"hash": "faef803e25fbf3e0680ee22fd11d4c0938b307a057edb984b982abfaf4270979",
"previousHash": null,
"changes": [],
"summary": "Added: Bis(2-ethylhexyl) phthalate (117-81-7)",
"diffText": null,
"payload": {
"kind": "substance",
"input": "117-81-7",
"identifierType": "cas",
"status": "found",
"statusReason": null,
"substance": {
"rmlId": "100.003.829",
"name": "Bis(2-ethylhexyl) phthalate",
"ecNumber": "204-211-0",
"casNumber": "117-81-7",
"otherCasNumbers": [
"109630-52-6",
"137718-37-7",
"126639-29-0",
"8033-53-2",
"50885-87-5",
"607374-50-5",
"40120-69-2",
"205180-59-2",
"275818-89-8"
],
"iupacName": null,
"molecularFormula": "C24H38O4",
"indexNumber": "607-317-00-9",
"synonyms": [
"DEHP",
"di-sec-octyl phthalate",
"Phthalic acid di(2-ethylhexyl) ester; DDT Dioctylphthalate; DEHP",
"Di-2-ethylhexyl phthalate",
"Bis(3-methylhexyl)benzene-1,2-dicarbonate",
"DEHP or DI-(2-ETHYLHEXYL)PHTHALATE or BIS-(2-ETHYLHEXYL)PHTHALATE",
"o-Benzenedicarboxylic acid, dioctyl ester",
"AI3-04273",
"Di-s-octyl phthalate, >1 - 25% in a non hazardous diluent",
"Di-(2-ethylhexyl) phthalate (DEHP)",
"Dioctyl phthalate (VAN)",
"Di(2-ethylhexyl) o-phthalate",
"1,2-Benzenedicarboxylic acid, bis(2-ethylhexyl) ester (Conc≥0.5%)",
"di(2-ethylhexyl)phthalate; bis(2-ethylhexyl) phthalate",
"Phthalic acid dioctyl ester",
"1,2-Benzenedicarboxylic acid, 1,2-bis(2-ethylhexyl) ester (C < 0.1%)",
"1,2-Benzenedicarboxylic acid bis(2-ethyl-hexyl) ester; Bis(2-ethylhexyl)phthalate, Dioctyl phthalate",
"BEHP",
"1,2-Benzenedicarboxylic acid, bis(2-ethylhexyl) ester (List 1-Inert Ingredient of Toxicological Concern)",
"Bis(ethylhexyl) phthalate"
]
},
"registration": {
"status": "registered",
"activeDossiers": 11,
"inactiveDossiers": 17,
"totalDossiers": 28,
"fullRegistrations": 9,
"intermediateRegistrations": 2,
"jointSubmission": true,
"tonnageBand": "tonnageBand10000to100000",
"tonnageBandLabel": "10,000 – 100,000 tonnes per year",
"latestDossierUpdate": "2024-07-24",
"preRegistered2008": true
},
"candidateList": {
"listed": true,
"entryType": "direct",
"entryName": "Bis(2-ethylhexyl) phthalate",
"entryRmlId": "100.003.829",
"dateOfInclusion": "2008-10-28",
"reasons": [
"Toxic for reproduction (Article 57c)",
"Endocrine disrupting properties (Article 57(f) - environment)",
"Endocrine disrupting properties (Article 57(f) - human health)"
],
"sourceUrl": "https://chem.echa.europa.eu/100.003.829/obligations/candidateList/details"
},
"authorisationList": {
"listed": true,
"entryType": "direct",
"entryName": "Bis(2-ethylhexyl) phthalate (DEHP)",
"entryNumber": "04",
"sunsetDate": "2015-02-21",
"latestApplicationDate": "2013-08-21",
"reasons": [
"Toxic for reproduction (Article 57c)",
"Endocrine disrupting properties (Article 57(f) - environment)",
"Endocrine disrupting properties (Article 57(f) - human health)"
],
"remarks": "1 September 2021 for the use of the substance in the production of spare parts as articles or as complex products for the repair of articles or complex products, the production of which ceased or will have ceased before the sunset date indicated in the entry for that substance, where that substance was used in the production of those articles or complex products and these cannot function as intended without that spare part and the spare part cannot be produced without that substance, and for the use of the substance (on its own or in a mixture) for the repair of such articles or complex products where that substance on its own or in a mixture was used in the production of those articles or complex products and they cannot be repaired otherwise than by using that substance.\n\nBy way of derogation:\n14/06/2023 for uses in:\n- food contact materials within the scope of Regulation (EC) No 1935/2004,\n- immediate packaging of medicinal products covered under Regulation (EC) No 726/2004, Directive 2001/82/EC, and/or Directive 2001/83/EC,\n- mixtures containing DEHP at or above 0,1 % and below 0,3 % weight by weight;\n\n01/01/2029 for uses in medical devices within the scope of Regulations (EU) 2017/745 and (EU) 2017/746",
"sourceUrl": "https://chem.echa.europa.eu/100.003.829/obligations/authorisationList/details"
},
"restrictionList": {
"listed": true,
"entries": [
{
"entryNumber": "51",
"entryName": "Diisobutyl phthalate (DIBP); Dibutyl phthalate (DBP); Benzyl butyl phthalate (BBP); Bis(2-ethylhexyl) phthalate (DEHP)",
"entryType": "group",
"regulation": "R 2018/2005",
"conditionsUrl": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=uriserv:OJ.L_.2018.322.01.0014.01.ENG&toc=OJ:L:2018:322:TOC",
"decisionDates": [
"2005-12-14",
"2009-06-22",
"2015-03-02",
"2018-12-17"
],
"sourceUrl": "https://chem.echa.europa.eu/100.003.829/obligations/restrictionList/details"
}
]
},
"harmonisedClassification": {
"listed": true,
"indexNumber": "607-317-00-9",
"chemicalName": "bis(2-ethylhexyl) phthalate; di-(2-ethylhexyl) phthalate; DEHP",
"atp": "CLP00",
"effectiveDate": "2010-12-01",
"status": "In application",
"signalWord": "Danger",
"hazardClasses": [
{
"code": "Repr. 1B",
"hazardStatements": [
{
"code": "H360FD",
"text": "May damage fertility. May damage the unborn child."
}
]
}
],
"hazardStatements": [
"H360FD"
],
"pictograms": [
{
"code": "GHS08",
"text": "Health hazard"
}
],
"cmrCategory1": true,
"sourceUrl": "https://chem.echa.europa.eu/100.003.829/harmonised/424025"
},
"otherProcesses": [
{
"code": "PIC_INVENTORY",
"label": "PIC inventory"
},
{
"code": "CNL_NOTIFIED",
"label": "C&L Inventory notifications"
},
{
"code": "DWD_INVENTORY",
"label": "Drinking Water Directive inventory"
},
{
"code": "RSIM_DWD_INVENTORY",
"label": "Drinking Water Directive inventory"
},
{
"code": "PIC_ANNEX_I",
"label": "PIC Annex I"
}
],
"otherLegislationReferences": 31,
"candidates": [],
"sourceUrl": "https://chem.echa.europa.eu/100.003.829",
"sourceCheckedAt": "2026-09-15T12:00:00.000Z"
}
}

Pricing

EventNameWhat it meansPrice
apify-actor-startActor startCharged by Apify when a run starts: once for a run of up to 1 GB of memory, and once more for every extra GB. It covers the first five seconds of compute.$0.00005 per run up to 1 GB of memory ($0.05 per 1,000)
substance-looked-up (primary)Substance looked upOne substance resolved in ECHA CHEM and delivered with its identity, REACH registration status, Candidate List, Authorisation List and Restriction List status, and harmonised classification. In monitor mode charged once, when a watched substance is first recorded.$0.20 per substance ($200.00 per 1,000)
change-detectedChange detectedIn monitor mode: a substance added to, changed on or removed from a followed list (Candidate List, Authorisation List, Restriction List), or a change in the status of a watched substance.$1.00 per change ($1000.00 per 1,000)

These are list prices, which the Free plan pays. Paid Apify plans pay less for every event except the Actor start: 5% on Apify's Bronze tier, 10% on Silver and 15% on Gold and higher.

The monitor example above watches four substances: if ECHA finds all four, its first run costs 4 x $0.20 = $0.80 plus the $0.00005 start fee, so $0.80005, and the list entries it records as a baseline are free. In lookup mode every run charges each substance it finds, so a list of 1,000 substances that ECHA all finds costs $200 plus the start fee each time you run it. A monitor charges the lookup of a watched substance once, on the run that first records it, and after that $1 for each change. Our test of five inputs, replayed from ECHA CHEM responses recorded on 15 September 2026 (117-81-7, EC 203-777-6, Bisphenol A, one CAS number ECHA does not know and one with a wrong check digit), found three substances and charged 3 x $0.20 = $0.60; on Apify the start fee makes that run $0.60005. (Likewise on README:364: "...with n-hexane watched was charged $3.00: $1 for each of the two new Candidate List entries and $1 for n-hexane; on Apify the start fee makes that run $3.00005.")

Following the Candidate List, Authorisation List and Restriction List daily costs the Actor start fee per run (a fraction of a cent) plus $1 per change; the Candidate List gained 2 entries in February 2026 and 1 in November 2025. One run never charges more than maxChangesPerRun changes (default 25). When ECHA adds a substance you watch to a list you follow, that is two changes: the new list entry and the change of your watched substance. In our test of the 4 February 2026 update, replayed from ECHA CHEM responses recorded on 15 September 2026, a monitor following the Candidate List and the Authorisation List with n-hexane watched was charged $3.00 plus the start fee, so $3.00005: $1 for each of the two new Candidate List entries and $1 for n-hexane. A daily monitor that sees no change for 30 days costs 30 x $0.00005 = $0.0015.

The most one run can cost with the default settings: in lookup mode 1,000 substances (maxSubstancesPerRun) x $0.20 = $200.00, plus one start fee of $0.00005 at the default 512 MB of memory, so $200.00005. In monitor mode 1,000 first lookups x $0.20 = $200.00 and 25 changes (maxChangesPerRun) x $1.00 = $25.00 can fall in the same run, so $225.00005. Lower either setting to lower that ceiling.

To cap a run yourself, set a maximum cost per run in the run options in Apify Console. The Actor reserves each lookup before it sends a request and starts no lookup that would take the run past that amount; the substances left over are logged as not looked up and cost nothing, and in monitor mode the changes that no longer fit follow in the next run. Console accepts no limit below $0.20005: one start fee plus one lookup.

Not charged: substances ECHA does not know, ambiguous names, invalid numbers, lookups that failed halfway, substances a run had no time left for, and the list entries a monitor records when it first follows a list. A monitor run in which nothing changed and no watched substance was added costs the $0.00005 start fee only; the run that first records a watched substance charges $0.20 for it. Because a lookup that finds nothing is free, such lookups share an allowance of 1,000 requests per run (in either mode), retries included, plus maxSearchPages per substance found. A lookup starts only while its search requests (one per CAS or EC number, up to maxSearchPages per name) still fit next to those of the lookups in progress, which can take a run past the allowance with their retries and, when they fail, the requests after their search. CAS and EC numbers go before names, and the substances that do not fit are logged as not looked up, so remove numbers and names ECHA CHEM does not know from long lists. When ECHA CHEM stops answering (10 lookups in a row without an answer; in lookup mode one more for each substance the run has found, up to 50; fewer when ECHA CHEM has answered no lookup for ten minutes), new lookups wait and one lookup tries again: it makes each of its requests up to five times, pausing between the attempts for a random time of up to 30, 60, 120 and 120 seconds (under three minutes per request on average), and at least as long as ECHA CHEM asks, if that is two minutes or less. An outage of a few minutes is often waited out, not always; if ECHA CHEM answers, the run goes on, otherwise it starts no more lookups. A run that has already been going for two minutes when ECHA CHEM stops answering (a monitor's list reads included) does not make that attempt at all: it ends with what it has rather than spending minutes more on a service that is down. A monitor run that read none of its followed lists makes its first lookup this way, since nothing has shown yet that ECHA CHEM answers, and makes it for the watched substance it checked most recently, if any (a CAS or EC number when one was checked before, otherwise a name), so that a substance ECHA CHEM keeps refusing does not hold up every run; if that lookup gets no answer, it counts as the first of the ten and the other lookups go on as usual, and the same outage gets no second attempt. The other lookups wait for that first one, so on a run with a timeout it waits this way only for the time the other watched substances leave free (counted at one and a half times what they take at four requests a second, more when maxConcurrency is below 3, and a minute more for its last attempt), and only while that is at least a minute; below that its requests get the ordinary four attempts, and when the time is that short from the start, the first lookup runs alongside the others with the ordinary attempts, as in a run that read a list. In lookup mode the substances it did not look up are delivered free with status lookup-failed, as many as the lookups maxSubstancesPerRun still allowed: run just those again later, because a run of the whole list charges every substance it finds again. A watched substance that a run could not look up (a limit reached, ECHA CHEM not answering) is not recorded yet: the run that first looks it up records it and charges the lookup, not a change.

FAQ

What is the difference between the Candidate List, the Authorisation List and the Restriction List?

The Candidate List (Article 59) names substances of very high concern; inclusion triggers information duties (Articles 7(2), 31, 33, SCIP) but does not forbid anything. Substances are moved from it to the Authorisation List (Annex XIV) with a sunset date, after which every use in the EU needs an authorisation. The Restriction List (Annex XVII) limits or bans specific uses, concentrations or articles regardless of the other two lists; a substance can be restricted without ever being on the Candidate List.

A substance is "listed" through a group entry. What does that mean?

Many entries cover a group ("phthalates", "PFAS", "lead compounds"). ECHA links the member substances to the entry; the Actor reports entryType: "group" with the entry's name, and the obligations are the same as for a direct entry. When ECHA links a substance to more than one Candidate List entry, or more than one Annex XIV entry, the record carries the first one ECHA CHEM returns, with that entry's date and reasons; every Annex XVII entry is delivered.

Why is a name not found while ECHA's website finds it?

ECHA's search returns every record that mentions the words; the Actor accepts only records that carry the exact name (as ECHA name, EC name, IUPAC name, synonym or trade name), so that a lookup never returns the wrong substance. Use the CAS or EC number when in doubt: the Actor then prefers the record whose own number it is, and lists other records that carry the same number under candidates.

How soon after an ECHA update does the monitor report it?

The Actor reads ECHA CHEM live; a change is reported on the first run after ECHA publishes it. Schedule daily on working days.

The data is public regulatory information published by ECHA; ECHA permits reuse with attribution. This Actor is designed to process substance-level public data: it reads what ECHA CHEM publishes about a substance and delivers no registrant, company or contact field, so a record describes a substance and not a person. What you type into substances is your own input and comes back in the record's input field, so keep personal data out of it; for anything you do put there, you are the controller under the GDPR and it stays in your own dataset. The Actor is not affiliated with ECHA. Regulatory conclusions (whether your article needs a notification, which use is exempted) remain your responsibility; the Actor gives you ECHA's data and the links to the legal texts.

Support

Found a bug or need a feature? Open an issue on the Actor page. We usually respond within a day.

Last live run against ECHA CHEM: 21 September 2026, with the input the Console form opens with.