The new Amass app is live. Ask in plain language, check every claim. Try it free

Use Case

Every FDA and EMA Authorization for One Substance

Semaglutide holds ten FDA and EMA authorizations under five invented names. RegulatoryCore returns all ten from one search on the substance.

October 8, 202612 min read
  • Use Case
  • Product

Finding every FDA and EMA authorization for one substance is hard because of the names. Semaglutide holds ten authorizations across the two agencies under five invented names, one of them six months old, one of them a fixed combination. Adalimumab holds twenty-eight, and six of the European names no longer carry an authorization. RegulatoryCore returns either set in one call.

TL;DR

  • Search on the substance and every product containing it comes back, both agencies, authorized and withdrawn, on one status vocabulary. Searching semaglutide returns all ten of its authorizations. Searching Ozempic, one brand out of five, returns nine of those same ten.
  • The hard part is knowing which products exist. Neither agency publishes "every product containing substance X, both regions", and the two semaglutide products least likely to be on a watchlist are the newest approval and the combination product.
  • One substance, seven literal spellings. Across the eleven US adalimumab authorizations the substance field reads Adalimumab on five of them and appends a four-letter biosimilar suffix on the other six, as in Adalimumab-Adbm. Same molecule, same nonproprietary name, seven different spellings of it. An exact match on Adalimumab returns five and says nothing about the six it missed.

The question

Every regulatory, CI and legal team asks a version of the same thing:

What else is out there with this substance in it? Both agencies, including anything that has been withdrawn, and what each one was actually approved for.

A substance reaches each market as one or more products, each with its own invented name, its own authorization and its own document set. Five things make that mapping hard to reconstruct:

  • One region, several names. The same molecule is sold under different invented names for different indications, and a second application can be filed years later for an indication the first one does not carry.
  • Two regions, unrelated names. Trikafta in the US is Kaftrio in the EU. Symdeko is Symkevi. Soliqua is Suliqua. Some of those pairs look alike and some do not, and the resemblance tells you nothing: each EU name is its own invented name, not a variant of the US one.
  • A product in one market, a paragraph in the other. The US grants the second indication as a new application under a new brand. The EU adds it to the existing authorization as another block of section 4.1.
  • The name you are given may be withdrawn. Brand names sit in supply agreements, licensing terms, old competitor decks and the published literature for years after the product stops shipping. Look one up somewhere that only carries what is currently marketed and you get an empty result, which reads like "no such product" rather than "withdrawn, and here is the record".
  • The substance name is not an identifier. Every US biosimilar carries a four-letter suffix (adalimumab-adbm), but the FDA's data does not keep it in one field. openFDA's substance field is filled in on four of the eleven US adalimumab products, all four without the suffix, and empty on the other seven, Humira included. The generic-name field carries the suffix on every biosimilar. The EMA never writes it. So anything that matches the substance name exactly as written drops part of the answer, and tells you nothing about what it dropped.

The underlying question is which products you have not heard of, and typing names into a search box cannot answer it, whichever search box it is.


Semaglutide: five names, ten authorizations

Ask the Amass app, or any assistant with the MCP server connected:

Every FDA and EMA authorization that contains semaglutide, with status and what each one is approved for.

Ten authorizations come back, under five invented names.

Ten authorizations across two agencies under five invented names. Kyinsu and Kayshild are the two that a watchlist keyed on brand names does not have.

AgencyProductGrantedStatusFor
FDAOzempic (injection)2017-12-05ActiveT2D, CV risk, CKD
EMAOzempic2018-02-08ActiveT2D
FDAOzempic (tablets)2019-09-20ActiveT2D, CV risk
FDARybelsus2020-01-16ActiveT2D
EMARybelsus2020-04-03ActiveT2D
FDAWegovy2021-06-04ActiveWeight, CV risk
EMAWegovy2022-01-06ActiveWeight, adults and adolescents
EMAKyinsu (with insulin icodec)2025-11-24ActiveT2D
FDAWegovy (second application)2025-12-22Active(indication field empty)
EMAKayshild2026-03-26ConditionalNon-cirrhotic MASH, F2 to F3

Kayshild. A conditional EU authorization, six months old, for MASH with moderate to advanced fibrosis. It contains semaglutide. Its name has nothing in common with Ozempic, Wegovy or Rybelsus, so a watchlist built on those three names does not return it. It is also the only row in the table outside diabetes and weight.

Kyinsu. Insulin icodec plus semaglutide, authorized in the EU ten months ago. Its activeSubstance reads Insulin Icodec;Semaglutide, because the record names every active rather than the first. In a combination product the substance you are tracking is not in the product name, so only a substance-level search reaches it.

Two US applications per brand, one EU authorization. Ozempic holds two, one for the injection and one for the tablets, and the label text on the second one describes both Rybelsus and Ozempic tablets. Wegovy holds two. Each record carries the others in authorizationsByAgency, so the grouping is a field on the record rather than something you reconstruct.

The same indication sits in a different place in each region. The EU Wegovy authorization carries the adolescent population with CDC percentile cut-offs in its own indication text; the US splits paediatric weight management differently across its two applications. Comparing what a substance is approved for in the two regions means comparing authorizations, which works only once the brands are grouped.

Searching one brand name

Searching the substance returns those ten, plus two rows that contain no semaglutide at all. Now search a brand name instead of the substance. This is Ozempic, one of the five:

query: Ozempic                                  9 records

 1  Ozempic    FDA    NDA 213051 (tablets)
 2  Ozempic    EMA
 3  Ozempic    FDA    NDA 209637 (injection)
 4  Kayshild   EMA    โ† no field on this record says Ozempic
 5  Kyinsu     EMA    โ† no field on this record says Ozempic
 6  Wegovy     EMA
 7  Rybelsus   EMA
 8  Rybelsus   FDA
 9  Wegovy     FDA    NDA 215256
    Wegovy     FDA    NDA 218316        not returned

Every one of the nine contains semaglutide. Kayshild and Kyinsu rank above two of the products whose name you typed. On the Kayshild record the name is Kayshild, the substance is semaglutide, the holder is Novo Nordisk and the indication is MASH. Nothing in the record's own fields says Ozempic. It comes back because the search reads the text of the source documents as well as the record fields, and a record that matches inside its documents is placed alongside the records that match in their fields.

The brand query misses one row, the second Wegovy application, because neither its fields nor its documents say Ozempic anywhere. Reading the documents is what surfaces the names you did not know, and it is why this returns names a product lookup does not. It costs the two non-semaglutide rows the substance query returns. Both are cheap to check, because activeSubstance comes back on every row.


What this costs without Amass

One search produced that table. Assembling it by hand takes five steps:

  1. Find the set of invented names. There is no page on either side that lists products by substance across both regions. You get there from prior knowledge, a manufacturer's own pipeline page, or a news search, and you have no way to know when you are done.
  2. Open ten product pages across two portals with two different layouts.
  3. Read each one's status out of a different vocabulary: a marketing status per product on one side, an authorisation outcome per procedure on the other, with separate dates for opinion, decision, withdrawal, refusal and lapse.
  4. Pull the indication out of a PDF on one side and a differently structured PDF on the other.
  5. Repeat the whole thing next quarter, because step 1 has no completion criterion and Kayshild was authorized in March.

Amass has already done steps 2 through 4, once, for every authorization in RegulatoryCore. Steps 1 and 5 are the two with no end condition, and those are the ones it takes off your desk.


Adalimumab: twenty-eight authorizations, six withdrawn names

We asked the same question of a larger and older set of products. Adalimumab returns twenty-eight authorizations, eleven US and seventeen EU, one reference product and the rest biosimilars, spanning 2002 to 2024.

Six of the seventeen EU authorizations are no longer in force:

17 EU authorizations
   11  live
    5  withdrawn                Trudexa  Solymbic  Halimatoz  Kromeya  Cyltezo
    1  withdrawn during review  Fyzoclad   (never carried an authorization date)

A "what is approved" search returns the eleven and silently drops the other six, which is the wrong answer for anyone reading a contract, a freedom-to-operate memo or a five-year-old competitor deck. The withdrawn rows carry the same fields as the live ones, so that question is a filter rather than a different search. Cyltezo appears twice, active in the US and withdrawn in the EU, and the two records point at each other.

Now the US side, all eleven rows, with the substance exactly as each record writes it:

US brandactiveSubstanceEU row of the same namePaired
HumiraAdalimumabHumirayes
HyrimozAdalimumabHyrimozyes
CyltezoAdalimumab-AdbmCyltezo (withdrawn)yes
HulioAdalimumab-FkjpHulioyes
IdacioAdalimumab-AacfIdacioyes
YuflymaAdalimumab-AatyYuflymayes
AmjevitaAdalimumabnone (sold as Amgevita)no
HadlimaAdalimumabnone (sold as Imraldi)no
AbriladaAdalimumab-Afzbnoneno
SimlandiAdalimumab-Ryvknoneno
YusimryAdalimumabnoneno

One molecule, seven spellings. All seventeen EU rows say Adalimumab. Six of the eleven US rows carry the four-letter biosimilar suffix and five do not. All ten biosimilars have a suffix (Amjevita is adalimumab-atto). The five plain rows are Humira plus the four products whose openFDA substance field is filled in, because that field carries the plain name. A filter that matches the substance name exactly as written returns five of eleven on the US side and everything on the EU side, with nothing in the result to indicate the difference. This is why a search on the substance scores the text rather than demanding an exact match, and why the suffix cannot be read as proof of which product a record is. Use the application number for that.

Pairing follows the invented name. The six US rows that carry an EU sibling in authorizationsByAgency are exactly the six whose invented name is identical in both regions. The five that do not are the five whose EU name differs or does not exist. Amjevita and Amgevita are one letter apart and do not link. Hadlima and Imraldi are the same biosimilar and do not link; the table records that in parentheses because it is domain knowledge, not something the data asserts. Pairing rests on a reviewed list of aliases plus a shared molecule, and biosimilars are where that list is thinnest. A search on the substance returns all twenty-eight; cross-agency pairing covers six of the eleven US rows.

๐Ÿ” This is the part that is hard to get anywhere else. We make two decisions before the search ever runs, and a tool that skips either one cannot answer the question. Skip the withdrawn rows and adalimumab comes back missing six European names. Skip the source documents and Ozempic never reaches Kayshild. RegulatoryCore makes both, which is why the answer is one call rather than an open-ended search.


The wrangling behind the one call

Five transformations sit between the two agencies' pages and the tables above.

One status vocabulary. Twelve values cover both agencies, so a withdrawal means the same thing on either side and the two filter together:

FDA   marketing status, per product           โ”
EMA   authorisation outcome, per procedure,   โ”œโ”€โ”€โ†’   one 12-value status
      with separate opinion, decision,        โ”˜
      withdrawal, refusal and lapse dates

      ACTIVE    WITHDRAWN_VOLUNTARY   WITHDRAWN_FORCED
      REFUSED   LAPSED_SUNSET         WITHDRAWN_DURING_REVIEW    (+6)

Neither agency's native vocabulary contains the other's.

A substance on every record, including withdrawn products. A product's ingredients are printed on its label, and a label describes something currently marketed. Pull an application whose product stopped shipping and the obvious route to its ingredients ends in nothing, so label-derived data leaves withdrawn products with no ingredients at all. RegulatoryCore reconciles the available routes with a stated order of precedence:

FDA applications whose label route names no substance    2,011
   recovered from another route                          1,985
   still empty                                              26

Combination products name every active, which is what makes Kyinsu findable under semaglutide.

Brand-name matching, a reviewed alias list, and a molecule check. Matching removes strength, punctuation, dosage form and packaging markers:

XULTOPHY 100/3.6        โ†’  xultophy
TRIKAFTA (COPACKAGED)   โ†’  trikafta
PREVNAR 13              โ†’  prevnar 13     the integer is the valency, so it stays

A reviewed list of aliases covers the pairs that no amount of normalizing will join. Two records then link only if they also share a drug molecule, so two unrelated products that happen to share a trade name across jurisdictions stay apart.

A search that reads the documents. The search builds two result lists and combines them into one, which is why typing one brand name reaches the products that do not carry it.

A search on one brand name runs against the record fields and against the text of the source documents, and the two result lists are combined into one.

Every record carries a molecule id. referencesDrugCore points to at least one molecule on 89% of FDA and 93% of EMA records, and the same id carries into trials and literature:

AMDC_67V1LFibโ€ฆ   (adalimumab)
   โ”œโ”€ RegulatoryCore   28 authorizations, both agencies
   โ”œโ”€ TrialCore        what has run on it
   โ””โ”€ BiomedCore       what has been published on it

So "what is this substance, what ran on it, what has been published since" is three calls on one identifier rather than three name searches with three spellings.

The same question, written as an API call

You never have to write these. The Amass app and any assistant on the MCP server issue the search from the sentence you type. Written out, it is one request either way:

curl -sS "https://api.amass.tech/api/v1/cores/regulatorycore/records?query=semaglutide&limit=50" \
  -H "Authorization: Bearer $AMASS_API_KEY"

Twelve rows: the ten semaglutide authorizations, Kayshild and Kyinsu included, plus the two rows that are not semaglutide products at all.

curl -sS "https://api.amass.tech/api/v1/cores/regulatorycore/records?query=Ozempic&limit=15" \
  -H "Authorization: Bearer $AMASS_API_KEY"

Nine rows, ranked as shown earlier. Neither call needs a list of names.


The full field list, filters and endpoints are in the RegulatoryCore docs. The same data is in the Amass app and behind the MCP server for Claude, ChatGPT and other clients. If you are building something where "is this the same product?" is the hard part, get in touch. We'd like to compare notes.


Book a technical discussion