# EU Geographical Indication Records — eAmbrosia (`nexgensignal/eu-geographical-indication-records`) Actor

Keyless pay-per-record EU eAmbrosia geographical indications — protected name, GI type, product, country, status, legal basis. Producer-group org only; no person data. CC BY 4.0. GOLD $0.05 ladder.

- **URL**: https://apify.com/nexgensignal/eu-geographical-indication-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 gi records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## EU Geographical Indication Records — eAmbrosia

**Keyless. Pay per record. Every EU protected name — PDO, PGI, GI, TSG — as one clean register.**

This actor turns the **European Commission's eAmbrosia**, the EU register of geographical indications, into clean, per-name records — the official register of every protected food, wine, spirit, and agricultural name in the EU. Each run reads the Commission's keyless eAmbrosia API and delivers one row per protected name: its identifier and file number, the protected name itself, the GI type and product type, the countries, the registration status and protection date, the legal instrument and publication reference, and the producer-group organisation's name, country, and website. Protected-name / product grain, structured for engineering use, under the Commission's CC BY 4.0 reuse policy, with no natural-person data of any kind.

### What this is, in one paragraph

eAmbrosia is the Commission's authoritative register of the names protected across the EU as Protected Designations of Origin (PDO), Protected Geographical Indications (PGI), Geographical Indications for spirits and aromatised wines, and Traditional Specialities Guaranteed (TSG). This actor reads that register and flattens each entry into a single analysis-ready record: the GI identifier and file number, the protected name (or names), the GI type and product type, the product categories and CN classification, the countries, the registration status, the EU protection date, the last modification date, the legal instrument and its link, the publication reference, the third-country and amendment flags, and the producer-group organisation's name, country, and website. Values are carried **verbatim** as published. It is the protected-names layer of the EU single market. You are billed only for records actually delivered.

### Who buys this and for what job

- **Food, wine, and spirits producers, importers, and marketplaces** checking whether a name is protected, of what type, and in which countries.
- **IP, brand-protection, and compliance teams** monitoring the register of protected designations for enforcement and labelling.
- **Trade, provenance, and anti-counterfeit products** mapping protected names to their product categories and CN codes.
- **Data engineers** who want the eAmbrosia register as clean rows without paging the Commission's API by hand.

### Creative Commons Attribution 4.0 — free commercial reuse

One licence rider travels on every record. European Commission content in eAmbrosia is © European Union, and its reuse is authorised provided the source is acknowledged, under the **Creative Commons Attribution 4.0 International (CC BY 4.0)** licence per Commission Decision 2011/833/EU — free to reuse, including commercially, with attribution to the European Commission. That attribution travels on every record. One honest caveat rides too: these are register facts as published, not a legal determination of a name's protection status.

### Protected-name grain — holder organisations only, no person data

The unit of every record is a protected name — a designation and its product, never a person. Where a record names a producer group, that group is an **organisation** (a consortium or association), and this actor carries only its organisation identity: name, country, and website. The producer-group **contact** fields — email, phone, and postal address — and every attachment, control-authority, and recognised-producer sub-record are **structurally excluded and never read**. A person-key guard runs on every record as a backstop, and the acceptance suite feeds a record whose producer-group email, phone, and address are all populated and asserts that none of those keys or values can ever appear in output, while the producer-group organisation name is preserved.

### Sample output

![Sample output — EU Geographical Indication Records — eAmbrosia](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/eu-geographical-indication-records.png)

*Real rows from a live run of this actor (first 5 rows, selected columns).*

One full record from the same run, exactly as delivered:

```json
{
  "record_id": "EUGI00000000021",
  "gi_identifier": "EUGI00000000021",
  "file_number": "PDO-FR-A0994",
  "protected_name": "Arbois",
  "protected_names": "Arbois",
  "gi_type": "PDO",
  "product_type": "WINE",
  "product_categories": "1",
  "cn_classification": "220400000080",
  "countries": "FR",
  "status": "registered",
  "eu_protection_date": "1973-09-18",
  "modification_date": "2022-12-01T11:37:06.395Z",
  "legal_instrument": "Article 107 of Regulation (EU) No 1308/2013",
  "legal_instrument_uri": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32013R1308",
  "publication_reference": "Official Journal C 450, 28.11.2022",
  "third_country_flag": false,
  "amendments_in_progress_flag": false,
  "removed_flag": false,
  "producer_group_name": null,
  "producer_group_country": null,
  "producer_group_url": null,
  "source": "European Commission eAmbrosia — EU GI register",
  "source_url": "https://ec.europa.eu/agriculture/eambrosia/geographical-indications-register/",
  "licence": "European Commission eAmbrosia — the EU register of geographical indications. © European Union. Reuse is authorised provided the source is acknowledged (Commission Decision 2011/833/EU), under the Creative Commons Attribution 4.0 International (CC BY 4.0) licence — free to reuse, including commercially, with attribution to the European Commission.",
  "attribution": "Source: European Commission, eAmbrosia — the EU geographical indications register (webgate.ec.europa.eu).",
  "disclaimer": "Protected geographical-indication records at protected-name / product grain from the EU register. The producer-group ORGANISATION identity (name, country, website) is carried, but producer-group CONTACT fields (email, phone, postal address) and all attachment/authority sub-records are structurally excluded and never read — no natural-person data is emitted. Register facts as published, carried verbatim; not a legal determination of protection status.",
  "observed_at": "2026-09-25T17:32:22Z"
}
```

### Pricing

| Event | Free plan | Bronze | Silver | Gold / Platinum / Diamond |
|-------|-----------|--------|--------|---------------------------|
| `gi_record` | $0.05 | $0.045 | $0.04 | $0.0335 |

Delivered before charged. Blocked runs and empty results cost nothing.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `country` | string | — | Optional 2-letter country code (e.g. FR, IT, ES). |
| `giType` | string | — | Optional GI type (e.g. PDO, PGI, GI, TSG). |
| `productType` | string | — | Optional product type (e.g. WINE, SPIRIT, FOODSTUFF, AGRICULTURAL). |
| `nameContains` | string | — | Optional. Keep only records whose protected name contains this text. |
| `maxRecords` | integer | 500 | Ceiling on records delivered and billed. |

### Output

One JSON object per protected name. Real example (values as published):

```json
{
  "record_id": "EUGI00000000021",
  "gi_identifier": "EUGI00000000021",
  "file_number": "PDO-FR-A0994",
  "protected_name": "Arbois",
  "gi_type": "PDO",
  "product_type": "WINE",
  "product_categories": "1",
  "cn_classification": "220400000080",
  "countries": "FR",
  "status": "registered",
  "eu_protection_date": "1973-09-18",
  "legal_instrument": "Article 107 of Regulation (EU) No 1308/2013",
  "publication_reference": "Official Journal C 450, 28.11.2022",
  "third_country_flag": false,
  "producer_group_name": "Syndicat des Vignerons ...",
  "producer_group_country": "FR",
  "source": "European Commission eAmbrosia — EU GI register",
  "licence": "European Commission eAmbrosia ... CC BY 4.0 ...",
  "disclaimer": "Protected geographical-indication records ... contact fields ... never read ...",
  "observed_at": "2026-08-22T00:00:00Z"
}
```

An unbilled `RUN_RECEIPT` records the robots check, the filters, records matched and delivered, and whether charged equals delivered.

### Field reference

Each record is one protected name. Identity: `record_id` / `gi_identifier`, `file_number`, `protected_name`, and `protected_names` (all names, joined). Classification: `gi_type`, `product_type`, `product_categories`, and `cn_classification`. Scope and status: `countries`, `status`, `eu_protection_date`, `modification_date`, `third_country_flag`, `amendments_in_progress_flag`, and `removed_flag`. Legal basis: `legal_instrument`, `legal_instrument_uri`, and `publication_reference`. Producer-group organisation: `producer_group_name`, `producer_group_country`, and `producer_group_url` (contact fields excluded). Provenance: `source`, `source_url`, `licence`, `attribution`, `disclaimer`, and `observed_at`.

### How a run works

A run first re-reads the source host's robots posture from your runtime — the Commission's webgate host — and stops at the door if a Disallow ever covers the eAmbrosia API. It reads the full register once, selects **only** the protected-name, product, status, legal, and producer-group-organisation fields — never the producer-group contact fields or any attachment/authority sub-record — applies your optional country, type, product, and name filters, and flattens each entry to one record, delivered **before** it is charged, so a blocked or empty run costs you nothing. The actor stops at your `maxRecords` ceiling and records `charge_equals_delivered` in the receipt.

### Coverage and scope

The register holds on the order of **4,000+ protected names** across the EU and recognised third countries. Because each record carries the `gi_type`, `product_type`, and `countries`, segmenting by designation type, product, or country is straightforward. Pull one country, one product type, or the whole register to seed a protected-names table.

### Working with the register

The register is a reference table that most consumers join against, and the identifiers make that clean. Every record carries the `gi_identifier` and `file_number`, so a downstream system can key protected names to its own catalogue and refresh on the `modification_date`. The `gi_type` distinguishes PDO from PGI from TSG in a single filter, while the `product_type` and `cn_classification` link each protected name to its commodity, so a marketplace can flag whether a listed product name is a protected designation and of what kind. Because the `countries` field carries every country a name is protected in, and the `third_country_flag` marks non-EU origins, a compliance team can scope enforcement geographically, and two pulls taken apart can be diffed on the `status` and `removed_flag` to see which names were newly registered, amended, or removed between reporting rounds.

### Cost guidance

One `gi_record` per delivered name: cost = names delivered × your plan's per-record price. Scope with `country`, `giType`, `productType`, or `nameContains` to keep runs bounded. The whole register is ~4,000 names; 1,000 names is **$50** (Free) / **$33.50** (Gold).

### Honest limitations

- **Register facts, as published.** These are the register's own fields carried verbatim; this actor reformats, it does not make a legal determination.
- **Holder organisations only.** Producer-group organisation identity is carried; contact details are never emitted.
- **Acknowledge the Commission.** The CC BY 4.0 attribution travels on every record.
- **No person data** of any kind.

### Differentiation

It is distinct from any EU environmental, agricultural-subsidy, or company cell — its specific job is the **eAmbrosia register of protected names** (PDO / PGI / GI / TSG), name by name, with the producer-group contact fields removed.

### The NexGen Signal family

Part of the NexGen Signal family of pay-per-record data products:

- [EU EMAS Registration Records — EC](https://apify.com/nexgensignal/eu-emas-registration-records)
- [EU Animal Research Project Records — ALURES](https://apify.com/nexgensignal/eu-animal-research-project-records)
- [EU Natura 2000 Site Records — EEA Protected Sites](https://apify.com/nexgensignal/eu-natura2000-site-records)
- [EU Regulatory Change Records — CELLAR](https://apify.com/nexgensignal/eu-regulatory-change-records)
- [EU Grassland Condition Records — Grassland Watch](https://apify.com/nexgensignal/eu-grassland-condition-records)

*Source: European Commission, eAmbrosia — the EU geographical indications register (webgate.ec.europa.eu / ec.europa.eu). © European Union; reuse authorised with acknowledgement of the source under CC BY 4.0 per Commission Decision 2011/833/EU — free to reuse, including commercially, with attribution to the European Commission. Protected-name / product grain; producer-group organisation identity only, contact fields structurally excluded; no natural-person data of any kind. Register facts as published, not a legal determination.*

# Actor input Schema

## `country` (type: `string`):

Optional 2-letter country code to filter (e.g. FR, IT, ES).

## `giType` (type: `string`):

Optional GI type to filter (e.g. PDO, PGI, GI, TSG).

## `productType` (type: `string`):

Optional product type to filter (e.g. WINE, SPIRIT, FOODSTUFF, AGRICULTURAL).

## `nameContains` (type: `string`):

Optional. Keep only records whose protected name contains this text.

## `maxRecords` (type: `integer`):

Maximum records delivered and billed.

## Actor input object example

```json
{
  "maxRecords": 10
}
```

# Actor output Schema

## `results` (type: `string`):

Delivered records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxRecords": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/eu-geographical-indication-records").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "maxRecords": 10 }

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/eu-geographical-indication-records").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxRecords": 10
}' |
apify call nexgensignal/eu-geographical-indication-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/eu-geographical-indication-records"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/hLcTebnsmDjG5mYPN/builds/SpvCHgD87VfsapRDz/openapi.json
