# EU Animal Research Project Records — ALURES NTS (`nexgensignal/eu-animal-research-project-records`) Actor

Keyless, pay-per-record EC ALURES data. One row per authorised project — identifier, title, country, purposes, species, animal counts, severity, keywords. Anonymised; narrative free-text excluded; CC BY 4.0; no person data.

- **URL**: https://apify.com/nexgensignal/eu-animal-research-project-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 project 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 Animal Research Project Records — ALURES NTS

**Keyless. Pay per record. Every EU animal-research project's official anonymised summary, as structured facts.**

This actor turns the **European Commission ALURES** non-technical project summaries (NTS) into clean, per-project records — the official, legally anonymised summaries of authorised animal-research projects across the EU. Each run reads the Commission's keyless data-query API and delivers one row per project: the identifier, the title, the country, the purposes, the species and animal counts, the expected severity, the project duration, and the keywords. Project grain, anonymised, structured for engineering use, under the Creative Commons Attribution 4.0 licence, with a **hard person-gate: the long free-text narrative fields — the ones that could carry a natural person — are structurally omitted, and no author, establishment, or contact field is emitted.**

### What this is, in one paragraph

Under EU Directive 2010/63/EU, every authorised animal-research project must publish a non-technical summary (NTS), and by Article 43 that summary is **anonymised** — no names of persons or establishments. The Commission's ALURES portal collects them. This actor reads that collection and flattens each project into a single analysis-ready record of **structured facts**: the NTS identifier, the title and translated title, the country and language, the EU-submission flag, the project duration, the declared purposes, the total number of animals, the expected harms (species with severity bands), and the keywords. Values are exactly as published. You are billed only for records actually delivered.

### Who buys this and for what job

- **Research-policy, bioethics, and life-science-intelligence teams** analysing animal-research activity by country, purpose, species, and severity.
- **NGOs, journalists, and academics** studying trends in animal use across the EU from the official summaries.
- **Pharma and CRO strategy teams** benchmarking research activity and purposes across jurisdictions.
- **Data engineers** who want the ALURES summaries as clean structured rows — with the free-text narrative stripped — without paging the API by hand.

### Creative Commons Attribution 4.0 — free commercial reuse

One licence rider travels on every record. European Commission ALURES data is available for reuse under the **Creative Commons Attribution 4.0 International (CC BY 4.0)** licence per the Commission's legal notice — free to reuse, including commercially, with attribution to the European Commission. That attribution travels on every record. One honest caveat rides too: these are authorised-project summaries as published — this actor makes **no animal-welfare verdict in either direction**; it reports the facts as the summary states them.

### Hard person-gate — anonymised facts only, no narrative free-text

The NTS is anonymised by law, but each summary also carries long **free-text narrative** fields — project objectives, potential benefits, procedures, expected impacts, the 3Rs explanations (replacement, reduction, refinement), species-choice rationale, and fate reasons — unbounded prose that could, in principle, carry a natural person's name. This actor **does not read any of them.** Only the **structured facts** are selected: identifiers, title, country, language, duration, purposes, species and animal counts, severity, and keywords. There is no author, establishment, or contact field in the output — none exists in the source by law, and the narrative fields that could carry one are excluded at field selection. A person-key guard runs on every record as a backstop, and the acceptance suite feeds a record whose narrative fields carry a real person's name and asserts that neither the narrative keys nor the name can ever appear in output.

### Sample output

![Sample output — EU Animal Research Project Records — ALURES NTS](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/eu-animal-research-project-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": "NTS-FR-413237",
  "nts_id": "82888.0",
  "identifier": "NTS-FR-413237",
  "title": "Modèle expérimental in vivo : utilisation de rongeurs pour l’infection d’Anophèles par des parasites Plasmodium murins et entretien de colonies de moustiques Anopheles.",
  "translated_title": "Experimental in vivo model: use of rodents for infection of Anopheles by murine Plasmodium parasites and maintenance of Anopheles mosquito colonies.",
  "publication_date": "2026-09-24T22:00:19",
  "publication_year": 2026,
  "first_published_year": "2026",
  "version": "1.0",
  "country_code": "fr",
  "country": "France",
  "language": "French",
  "eu_submission": "yes",
  "project_duration_months": 60,
  "keywords": "Anophèles, Plasmodium, Cryo-stabilats, Maintien colonies, Infection",
  "translated_keywords": "Anopheles, Plasmodium, Cryo-stabilats, Colony maintenance, Infection",
  "purposes": "[PB13]Basic research: Other Basic Research, [PT22]Translational and applied research: Human Infectious Disorders",
  "total_number_of_animals": 2670
}
```

### Pricing

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

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

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `countryContains` | string | — | Optional. Keep only summaries whose country contains this text (e.g. France, Germany). |
| `keywordContains` | string | — | Optional. Keep only summaries whose keywords contain this text. |
| `maxRecords` | integer | 500 | Ceiling on records delivered and billed. |

### Output

One JSON object per project summary. Real example (values as published; narrative fields excluded):

```json
{
  "record_id": "NTS-FR-931715",
  "nts_id": "80947",
  "identifier": "NTS-FR-931715",
  "title": "Étude de l'effet des dérivés indoliques ...",
  "translated_title": "Study of the effect of indolic derivatives ...",
  "publication_year": 2026,
  "country_code": "fr",
  "country": "France",
  "language": "French",
  "eu_submission": "yes",
  "project_duration_months": 60,
  "purposes": "[PB5]Basic research: Gastrointestinal System ...",
  "total_number_of_animals": 104,
  "expected_harms": "Mice (Mus musculus) [Mild: 8, Moderate: 96]",
  "keywords": "Bifidobacterium longum, Indole derivatives, ...",
  "source": "European Commission ALURES non-technical summaries",
  "licence": "European Commission ALURES ... Creative Commons Attribution 4.0 ...",
  "disclaimer": "Authorised-project non-technical summary (NTS) records ... ANONYMISED ... narrative fields ... structurally omitted ...",
  "observed_at": "2026-08-22T00:00:00Z"
}
```

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

### Field reference

Each record is one project summary. Identity: `record_id` / `identifier`, `nts_id`, `title`, and `translated_title`. Publication: `publication_date`, `publication_year`, `first_published_year`, and `version`. Context: `country_code`, `country`, `language`, `eu_submission`, and `project_duration_months`. Content: `purposes`, `keywords`, and `translated_keywords`. Animals: `total_number_of_animals`, `expected_harms` (species with severity bands), `animals_fate`, `severe_procedure`, and `nhp_use`. Reference: `url`. Provenance: `source`, `source_url`, `licence`, `attribution`, `disclaimer`, and `observed_at`. Not present by design: project objectives, benefits, procedures, impacts, 3Rs explanations, species-choice rationale, fate reasons, and any other free-text narrative.

### How a run works

A run first re-reads the source host's robots posture from your runtime — the Commission's environmental data-query host — and stops at the door if a Disallow ever covers it. It then pages the ALURES NTS endpoint, applies your optional country and keyword filters, and flattens each project to one record — reading **only** the structured facts, never a narrative free-text field — 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 collection holds on the order of **58,000+ non-technical summaries** across EU member states. Because each record carries the `country` and `purposes`, segmenting by jurisdiction or research purpose is straightforward, and the `total_number_of_animals` and `expected_harms` fields support quantitative analysis of animal use and severity. Pull one country to build a national picture, or the whole collection to seed a research-activity dataset.

### Cost guidance

One `project_record` per delivered summary: cost = summaries delivered × your plan's per-record price. Scope with `countryContains` or `keywordContains` to keep runs bounded. The whole collection is ~58,000 summaries; 1,000 summaries is **$50** (Free) / **$33.50** (Gold).

### Honest limitations

- **Facts, not a verdict.** These are authorised-project summaries as published; this actor makes no animal-welfare judgment in either direction.
- **Anonymised, narrative-free.** The long free-text narrative fields are excluded by design; if you need the full published narrative, read the source portal directly.
- **As published.** Titles, purposes, and counts are exactly as the Commission publishes them; this actor reformats, it does not interpret.
- **No person data** of any kind.

### Differentiation

It is distinct from any grant, funding, or academic-research cell (which carry awards or publications, not authorised animal-use summaries). Its specific job is the **ALURES non-technical summary register** — anonymised project facts, structured, with the narrative provably excluded.

### The NexGen Signal family

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

- [EU Regulatory Change Records — CELLAR](https://apify.com/nexgensignal/eu-regulatory-change-records)
- [EU EMAS Registration Records — Eco-Management](https://apify.com/nexgensignal/eu-emas-registration-records)
- [EU Industrial Emissions Records — EEA IED Facilities](https://apify.com/nexgensignal/eu-industrial-emissions-records)
- [Grant Opportunity Records — US Grants.gov](https://apify.com/nexgensignal/grant-opportunity-records)
- [World Bank Project Records](https://apify.com/nexgensignal/world-bank-project-records)

*Source: European Commission, ALURES animal-use non-technical summaries (apps.data.env.service.ec.europa.eu). Reused under the Creative Commons Attribution 4.0 International (CC BY 4.0) licence per the Commission's legal notice — free to reuse, including commercially, with attribution to the European Commission. Anonymised project summaries (Directive 2010/63/EU Art. 43); long free-text narrative fields structurally omitted so no prose that could carry a natural person is emitted. Facts as published, no welfare verdict; no person data of any kind.*

# Actor input Schema

## `countryContains` (type: `string`):

Optional. Keep only summaries whose country contains this text (e.g. France, Germany).

## `keywordContains` (type: `string`):

Optional. Keep only summaries whose keywords contain 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-animal-research-project-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-animal-research-project-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-animal-research-project-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/eu-animal-research-project-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/LEof6Uqe1bHOflOIy/builds/aFvLEJg1hZh4bTyIL/openapi.json
