# EASA Part-145 Approved Organisations Dataset (`tehsnarf/easa-part-145-approved-organisations`) Actor

Extracts EASA's public dataset of BASA Part-145 maintenance organisation approvals (USA, Canada, Brazil) for aviation MRO compliance verification.

- **URL**: https://apify.com/tehsnarf/easa-part-145-approved-organisations.md
- **Developed by:** [Chris Hoover](https://apify.com/tehsnarf) (community)
- **Categories:** Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## EASA Part-145 Approved Organisations Dataset

Extracts EASA's public dataset of BASA Part-145 maintenance organisation approvals (organisations
located in the USA, Canada, and Brazil holding EASA Part-145 approval under bilateral aviation
safety agreements). Useful for MRO vendor verification, aviation compliance/audit workflows, parts
supplier due diligence, and insurer/broker risk checks.

### Use cases

1. **MRO vendor verification** — confirm a repair station's EASA Part-145 approval is currently
   valid before contracting maintenance work.
2. **Compliance monitoring** — track expiration/suspension dates for approvals your organisation
   depends on, ahead of renewal deadlines.
3. **Aviation supplier due diligence** — cross-reference a candidate MRO's FAA certificate number
   against its EASA approval status in one normalized dataset.

### Output fields

| Field | Type | Description |
|---|---|---|
| approvalType | string | Approval type code (e.g. "145") |
| easaApprovalNumber | string | EASA-issued approval number |
| organisationName | string | Full legal name of the approved organisation |
| country | string | Country where the organisation is located (USA, Canada, Brazil) |
| approvalStatus | string | Valid / Surrender / Suspended / Revoked / etc. |
| continuationDate | string | Continuation/renewal date, as published |
| extension | string | Extension field, when present |
| suspensionDate | string | Suspension/partial suspension date, when present |
| validUntil | string | Expiration date, when present |
| foreignApprovalReference | string | FAA certificate number or other foreign-authority reference |
| usState | string | US state (US approvals only, blank otherwise) |
| sourceUrl | string | The EASA page the row was scraped from |
| scrapedTimestamp | string | ISO 8601 UTC timestamp of the scrape |

### Example output

```json
{
  "approvalType": "145",
  "easaApprovalNumber": "EASA.145.0065",
  "organisationName": "GE CELMA Ltda.",
  "country": "BRAZIL",
  "approvalStatus": "Valid",
  "continuationDate": "14/11/2026",
  "extension": "",
  "suspensionDate": "",
  "validUntil": "",
  "foreignApprovalReference": "7504-05/ANAC",
  "usState": "",
  "sourceUrl": "https://www.easa.europa.eu/en/domains/aircraft-products/continuing-airworthiness-organisations/valid-and-invalid-basa-part-145-approvals-dataset",
  "scrapedTimestamp": "2026-08-18T08:13:49.991795+00:00"
}
```

### Input configuration

- `maxItems` (default 2700) — the full dataset has ~2,624 rows as of 2026-08-18; raise/lower to cap results.
- `countryFilter` (optional array) — restrict to specific countries, e.g. `["UNITED STATES"]`.
- `statusFilter` (optional array) — restrict to specific approval statuses, e.g. `["Valid"]`.

No start URLs are needed — this is a single fixed-page dataset, not a multi-page crawl.

### Pricing

$2 per 1,000 results.

| Results | Est. cost |
|---|---|
| 100 | $0.20 |
| 500 | $1.00 |
| 1,000 | $2.00 |
| 5,000 | $10.00 |

### Data source

EASA (European Union Aviation Safety Agency), public dataset page. Reproduction is authorised
by EASA's copyright policy provided the source is acknowledged (see
https://www.easa.europa.eu/copyright-disclaimer). This Actor performs a single request per run —
the full dataset is embedded server-side in the page, so no repeated pagination requests are made
against EASA's servers regardless of `maxItems`.

# Actor input Schema

## `maxItems` (type: `integer`):

Maximum number of rows to return (the full dataset has ~2,624 rows as of 2026-08-18)

## `countryFilter` (type: `array`):

Optional country names to filter on (e.g. UNITED STATES, CANADA, BRAZIL)

## `statusFilter` (type: `array`):

Optional approval status values to filter on (e.g. Valid, Surrender, Suspended)

## Actor input object example

```json
{
  "maxItems": 2700,
  "countryFilter": [],
  "statusFilter": []
}
```

# Actor output Schema

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

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("tehsnarf/easa-part-145-approved-organisations").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("tehsnarf/easa-part-145-approved-organisations").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 '{}' |
apify call tehsnarf/easa-part-145-approved-organisations --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tehsnarf/easa-part-145-approved-organisations"
        }
    }
}

```

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/y0hDuqrBjUNif8JgY/builds/0nrhkVFEQnnjUd1yP/openapi.json
