# Ireland Passport Application Status Tracker (`nerolabs/ireland-passport-tracker`) Actor

Returns the status of an Irish passport application from the DFA tracking tool (stage, target issue date, found or not), with a monitor mode alerting on stage or issue-date changes. Inputs: 11-digit application ID(s), monitorMode. Agent-ready: pay per event (x402 and MCP); not-found is charged.

- **URL**: https://apify.com/nerolabs/ireland-passport-tracker.md
- **Developed by:** [Adam Pearce](https://apify.com/nerolabs) (community)
- **Categories:** Travel, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 application lookups

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## 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

### What does Ireland Passport Application Status Tracker do?

**Checks the real, official status of an Irish passport application**, using the Department of Foreign Affairs' own [Passport Tracking](https://passporttracking.dfa.ie/passporttracking) tool, the same tool you'd check by hand, automated. Give it an 11-digit application ID (the barcode number from your application form or An Post receipt) and it returns whatever DFA's tracker currently shows. Point it at several applications at once, or turn on **Monitor mode** and schedule it to run daily or weekly to get alerted the moment something actually changes, instead of checking the DFA site yourself.

This covers Irish citizenship-by-descent applicants too, once your application has reached the passport stage. If you came here through **Foreign Birth Registration (FBR)**, see the FAQ below, that earlier stage has no online tracker at all, and this Actor is honest about that rather than pretending otherwise.

Run it directly from the Apify Console, schedule it, or call it via the [Apify API](https://docs.apify.com/api/v2) from your own app or AI agent.

### Why use Ireland Passport Application Status Tracker?

- **You're one of the ~250,000 people a year applying from the UK.** Irish passport applications from Britain hit a post-Brexit record in 2025, and keep climbing. If you're one of them (or helping someone who is), you've probably already refreshed the DFA tracker more times than you'd like to admit.
- **Citizenship application services need this for every client.** If you help people with Irish citizenship or passport applications, this turns "manually check the DFA site for each active client" into one scheduled run with an alert only when something actually moves.
- **Bulk and repeat checks, without the manual clicking.** Check a whole family's applications in one run, or set up Monitor mode and stop thinking about it until something changes.

### How to use Ireland Passport Application Status Tracker

1. Click **Try for free** or open the Actor in [Apify Console](https://console.apify.com).
2. Enter your **11-digit application ID**, from your application form or An Post receipt (or several, for a family).
3. Click **Start** for a one-off check, or turn on **Monitor mode** and schedule the Actor (daily or weekly) for ongoing alerts.
4. Read the result in the **Output** tab, or download it as JSON, CSV, or Excel.

### Input

| Field | Type | Description |
|---|---|---|
| `applicationId` | String | A single 11-digit application ID, for a one-off check. |
| `applicationIds` | Array | A list of 11-digit application IDs, for a bulk check or Monitor mode. |
| `monitorMode` | Boolean | When true, compares today's result against the last check and returns only the change (or a cheap no-change confirmation). Schedule the Actor to use this for real alerts. |
| `watchlistId` | String | Only needed if you're tracking more than one independent set of applications (e.g. one per family) and want their history kept separate. |

### Output

```json
{
    "applicationId": "12345678901",
    "found": true,
    "notFoundReason": null,
    "rawStatusText": "Application has been received. Your application is currently at Stage 2 of processing. Target Issue Date: 15 October 2026",
    "possibleStage": "Stage 2 of processing.",
    "possibleTargetIssueDate": "15 October 2026",
    "parseConfidence": "low",
    "sourceUrl": "https://passporttracking.dfa.ie/passporttracking",
    "dataRetrievedAt": "2026-08-20T11:10:52.602Z",
    "changeDetected": true,
    "changeSummary": "Stage changed from \"Stage 1\" to \"Stage 2 of processing.\" as of 2026-08-20."
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Data table

| Field | Description |
|---|---|
| `applicationId` | The 11-digit ID that was checked. |
| `found` | Whether DFA's tracker recognized this application ID. |
| `notFoundReason` | Plain-English explanation when not found (bad number, too new to appear, or a lookup error). |
| `rawStatusText` | The full status text DFA returned, always included, so nothing is lost even where structured extraction below is uncertain. |
| `possibleStage` | Best-effort extracted stage (see the honesty note below). |
| `possibleTargetIssueDate` | Best-effort extracted target issue date. |
| `parseConfidence` | `not_found`, `low`, or `unconfirmed`, see below. |
| `changeDetected` / `changeSummary` | Monitor mode only: whether anything changed since the last check, and what. |

### Pricing / Cost estimation

Pay-per-event, no subscription:

- **$0.01** per application lookup (one-off mode). A confirmed not-found result is charged the same, it's still a real, useful answer.
- **$0.05** per change detected in Monitor mode.
- **$0.002** per no-change confirmation in Monitor mode, so a daily or weekly schedule stays cheap on the days nothing moved.

A single applicant checking one application costs a few cents total across the life of an application. Scheduling Monitor mode weekly for a full year costs under $2.50 even if every single check is billed, most will be far cheaper no-change confirmations.

### Tips

- Use **Monitor mode** with a daily or weekly [Apify Schedule](https://docs.apify.com/platform/schedules) rather than running it by hand, that's the whole point: you get told when something changes instead of having to go and look.
- Check several family members in one run with `applicationIds` rather than running the Actor once per person.

### An honest note on parsing accuracy

DFA's tracking tool doesn't publish its result format anywhere, and there's no way to preview a real successful result without a real application ID (and it wasn't right to ask anyone for one just to test this). So this Actor's `possibleStage` and `possibleTargetIssueDate` fields are a **best-effort extraction**, not a guaranteed one. `rawStatusText` always carries the full text DFA actually returned, so even if the structured fields don't catch a particular wording, you'll still see exactly what DFA said. `parseConfidence` tells you how much to trust the structured fields at a glance. As more real results come through, structured extraction will keep improving.

### FAQ

**Does this cover Foreign Birth Registration (FBR)?** Only once your application has reached the passport stage. FBR itself (the citizenship-by-descent step that comes first) has no online status tracker at all, confirmed directly against DFA's own FAQ, only phone and webchat are offered for FBR-specific queries. This Actor is honest about that limit rather than guessing at a status FBR doesn't publish.

**Is this legal / official?** Yes. This Actor only reads the same public DFA tracking tool anyone can use in a browser, no login, no API key, no data DFA doesn't already show you for your own application.

**What if my application isn't found?** Double-check the 11-digit number from your application form or An Post receipt. It can also take a few working days after posting for a new application to appear in DFA's system.

**Something looks off, or you have feedback?** Please open an issue on the Actor's Issues tab, checked daily, real replies from a real person.

# Actor input Schema

## `applicationId` (type: `string`):

The 11-digit barcode number from your passport application form or An Post receipt. Use this for a single one-off check.

## `applicationIds` (type: `array`):

A list of 11-digit application IDs. Required for Monitor mode (that's what gives each application a stable identity to track over time). Also the way to check several applications, e.g. a whole family's, in one run.

## `monitorMode` (type: `boolean`):

When true, the Actor loads the last-seen tracking status for each application ID, compares against today's live DFA result, and returns only the change (or a cheap no-change confirmation). Schedule this Actor to run daily or weekly with the same applicationIds and watchlistId to get alerted the moment a status or target issue date changes, instead of checking the DFA site by hand. Requires applicationId and/or applicationIds.

## `watchlistId` (type: `string`):

Only needed if you're tracking more than one independent set of applications from the same Apify account (e.g. one per family) and want their history kept separate. Leave as default otherwise.

## Actor input object example

```json
{
  "applicationId": "12345678901",
  "applicationIds": [],
  "monitorMode": false,
  "watchlistId": "default"
}
```

# Actor output Schema

## `dataset` (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 = {
    "applicationId": "12345678901"
};

// Run the Actor and wait for it to finish
const run = await client.actor("nerolabs/ireland-passport-tracker").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 = { "applicationId": "12345678901" }

# Run the Actor and wait for it to finish
run = client.actor("nerolabs/ireland-passport-tracker").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 '{
  "applicationId": "12345678901"
}' |
apify call nerolabs/ireland-passport-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nerolabs/ireland-passport-tracker"
        }
    }
}

```

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/dm4M2CiaBnvOPUxoM/builds/rHjFlOuRnQfHGTX22/openapi.json
