# AKC Events Scraper (`automation-lab/akc-events-calendar`) Actor

Search the public AKC Events Calendar by month, event type, breed, and state. Export dated event counts and drill-down URLs for competition monitoring.

- **URL**: https://apify.com/automation-lab/akc-events-calendar.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Sports
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.24 / 1,000 akc event dates

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?

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

## AKC Events Scraper

Search public **AKC events** by calendar month, competition type, breed, and US state. The Actor exports one normalized record per matching date with the event count and an AKC drill-down URL.

Use it to build a monthly competition calendar, compare scheduled runs, or feed dated AKC event availability into a spreadsheet or data pipeline. It does not scrape entrants, placements, dog results, or handlers.

### What does AKC Events Scraper do?

The Actor queries the public American Kennel Club Events Calendar and turns its interactive month view into reusable JSON records.

It supports:

- one month per run in `YYYY-MM` format;
- one or more AKC event type codes;
- optional state filtering;
- an optional exact AKC breed label;
- a predictable maximum output limit;
- direct links back to each dated AKC calendar view.

The primary output is a dated count, not an individual event-detail record. If the source says three agility events match September 12, the Actor saves one September 12 row with `eventCount: 3`.

### Who is it for?

- **Competitors and handlers** planning travel around upcoming competitions.
- **Breed clubs** tracking relevant conformation and companion events.
- **Trainers** reviewing agility, obedience, rally, scent work, and Fast CAT availability.
- **Researchers** comparing event density across months or states.
- **Automation teams** scheduling a monthly calendar export into Sheets, Airtable, or a database.

### Why use this Actor?

The public calendar is designed for browsing. This Actor provides compact records that are easier to store, compare, filter, and integrate.

It uses the calendar's lightweight public structured-data route rather than rendering a browser. That keeps runs fast and avoids downloading images, fonts, advertising, or unrelated page assets. No AKC account, cookies, user credentials, or proxy configuration is required.

### What AKC event data is extracted?

| Field | Meaning |
| --- | --- |
| `date` | Matching calendar date in `YYYY-MM-DD` format |
| `eventCount` | Number of matching AKC events on that date |
| `eventTypeCode` | Calendar code such as `AG`, `CONF`, or `SCWK` |
| `eventType` | Human-readable competition type |
| `month` | Requested month |
| `states` | State filters; empty means all locations |
| `breed` | Resolved breed label, or `null` for all breeds |
| `breedCode` | AKC calendar breed code, or `null` |
| `drillDownUrl` | AKC page for inspecting events on that date |
| `sourceApiUrl` | Public calendar endpoint used for the record |
| `scrapedAt` | Collection timestamp |

### How to search AKC events

1. Open the Actor input page.
2. Enter a month such as `2026-09`.
3. Add one or more event type codes.
4. Optionally add state codes such as `CA`, `TX`, or `NY`.
5. Optionally enter an exact AKC breed label such as `Golden Retrievers`.
6. Set `maxItems` and start the run.
7. Export the default dataset as JSON, CSV, Excel, or XML.

A useful first run is:

```json
{
  "month": "2026-09",
  "eventTypes": ["AG"],
  "states": ["CA"],
  "maxItems": 100
}
```

### Input parameters

#### `month`

Calendar month in `YYYY-MM` format. If omitted through the API, the Actor uses the current UTC month.

#### `eventTypes`

One or more supported AKC codes. Common values include:

- `CONF` — Conformation: All-Breed and Group
- `S` — Conformation: Specialty
- `AG` — Agility Trials
- `OBED` — Obedience Trials
- `RLY` — Rally Trials
- `SCWK` — Scent Work
- `FCAT` — Fast CAT
- `HT` — Hunting Tests
- `HE` — Herding Tests and Trials
- `TRK` — Tracking Events

The input validator rejects unknown codes instead of silently returning misleading empty output.

#### `states`

Optional list of two-letter state or territory codes. Use an empty list for all locations. Multiple states are combined into one calendar search, and every output row retains the applied list.

#### `breed`

Optional exact label from the AKC calendar, for example `Golden Retrievers`. A calendar breed code is also accepted. Breed filtering primarily applies to competition types where AKC exposes breed eligibility, especially conformation.

#### `maxItems`

Maximum dated rows saved across all selected event types, from 1 to 5,000. The Actor stops before exceeding the limit.

### Example output

A California scent work search can return:

```json
{
  "date": "2026-09-05",
  "eventCount": 2,
  "eventTypeCode": "SCWK",
  "eventType": "Scent Work",
  "month": "2026-09",
  "states": ["CA"],
  "breed": null,
  "breedCode": null,
  "drillDownUrl": "https://www.apps.akc.org/apps/event_calendar/index.cfm?urlday=2026-09-05&event_type=SCWK&event_states=CA&event_month=Sep&event_year=2026&breed=&#buttonlocal",
  "sourceApiUrl": "https://www.apps.akc.org/apps/event_calendar/queries/_functions_ajax2.cfm?start_month=9&start_year=2026&breed=&event_type=SCWK&event_states=CA",
  "scrapedAt": "2026-08-28T15:09:20.099Z"
}
```

Open `drillDownUrl` to inspect the source calendar's individual listings for that date.

### How much does it cost to search AKC events?

Pricing uses one run-start charge and one `item` charge for each dated record saved. Empty dates, malformed records, and records outside the requested month are not charged as items.

At the BRONZE tier, the current source configuration is:

- **$0.05 per run start**;
- **$0.002068 per dated item**.

Example BRONZE totals:

| Output | Estimated Actor charge |
| --- | ---: |
| 10 dated records | $0.07068 |
| 25 dated records | $0.10170 |
| 100 dated records | $0.25680 |

Apify applies account-volume tiers, so the actual item rate can be lower at higher tiers. Platform compute may also appear according to your Apify plan. Check the live pricing panel before a large run.

### Recurring monitoring workflow

For recurring competition monitoring:

1. Save one Task per event type, state group, or breed.
2. Schedule it monthly or weekly in Apify Console.
3. Send each run's dataset to Google Sheets, Make, Zapier, or a webhook.
4. Compare date/count pairs with the previous run.
5. Follow changed dates through `drillDownUrl`.

The Actor produces snapshots. It does not maintain history, compute diffs, or send alerts itself; those steps belong in the scheduled workflow.

### Export and integration options

The default dataset works with:

- JSON, JSONL, CSV, Excel, XML, and RSS exports;
- Apify webhooks;
- Make and Zapier;
- Google Sheets;
- Python or JavaScript pipelines;
- Apify API clients;
- MCP-compatible AI assistants.

Use `date`, `eventTypeCode`, `states`, and `breedCode` as a practical comparison key. Keep `scrapedAt` to distinguish snapshots.

### Run with the Apify API

Replace `<APIFY_TOKEN>` with your token.

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~akc-events-calendar/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"month":"2026-09","eventTypes":["AG"],"states":["CA"],"maxItems":100}'
```

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/akc-events-calendar').call({
  month: '2026-09',
  eventTypes: ['AG'],
  states: ['CA'],
  maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient(token="<APIFY_TOKEN>")
run = client.actor("automation-lab/akc-events-calendar").call(run_input={
    "month": "2026-09",
    "eventTypes": ["AG"],
    "states": ["CA"],
    "maxItems": 100,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Use AKC Events Scraper through MCP

Add the Apify MCP server to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/akc-events-calendar"
```

#### Claude Desktop, Cursor, and VS Code setup

Claude Desktop, Cursor, and VS Code can use this equivalent MCP configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/akc-events-calendar"
    }
  }
}
```

Example prompts:

- “Find September AKC agility event dates in California.”
- “Export Texas and Oklahoma conformation dates for Golden Retrievers.”
- “Run the AKC calendar search for scent work and summarize the busiest dates.”

### Limits and failure behavior

- The source provides calendar counts, so multiple individual events can be represented by one dated row.
- Dates outside the requested month are removed even when the calendar endpoint returns adjacent weeks.
- The Actor does not return entrants, placements, dogs, judges, handlers, or show results.
- Breed names must match the public calendar label or code.
- Empty valid searches succeed with an empty dataset.
- Invalid months, event codes, states, breeds, HTTP errors, and malformed upstream responses fail the run clearly.
- Public source content can change; use the linked AKC page as the final authority.

### Legality and responsible use

The Actor accesses public AKC calendar information without an account. Use it in accordance with applicable law, AKC terms, and Apify policies. Avoid excessive schedules, republishing copyrighted page content, or using event information for harassment or unsafe activity.

This tool is independent and is not affiliated with, endorsed by, or sponsored by the American Kennel Club.

### Related Actors

This Actor is intentionally standalone because no current automation-lab Actor provides a directly complementary AKC or dog-competition dataset. Combine it with Apify webhooks, dataset exports, or your existing comparison pipeline rather than an unrelated scraper.

### Troubleshooting

#### Why is the dataset empty?

The chosen month, event type, state, and breed combination may have no matching public dates. Try removing the breed or state filter, or verify the month in the AKC calendar.

#### Why was my breed rejected?

Use the full calendar label, such as `Golden Retrievers`, rather than a casual singular name. The AKC calendar code also works.

#### Why are there fewer rows than events?

Each row represents a date and contains `eventCount`. A count of four means four matching calendar events share that date.

#### Why did the run stop early?

Check `maxItems`. It applies across all selected event types, not separately to each type.

### FAQ

#### Does it scrape AKC show results?

No. This Actor intentionally covers upcoming calendar counts and drill-down URLs. Entrants, placements, and results are excluded.

#### Does it need an AKC login or proxy?

No. It uses anonymous public calendar routes.

#### Can I search several event types?

Yes. Add several codes to `eventTypes`. Output rows identify the type that produced each match.

#### Can I monitor changes automatically?

Schedule an Apify Task and compare successive datasets in your preferred integration. The Actor itself emits the current snapshot and does not send change alerts.

#### Is an empty run an error?

No, when the source genuinely has no matching dates. Invalid inputs or unrecognizable source responses fail instead of being reported as an empty success.

# Actor input Schema

## `month` (type: `string`):

Month to search in YYYY-MM format.

## `eventTypes` (type: `array`):

One or more AKC calendar event type codes, for example AG (agility), CONF (all-breed conformation), OBED (obedience), RLY (rally), SCWK (scent work), or FCAT (Fast CAT).

## `states` (type: `array`):

Optional two-letter US state or territory codes. Leave empty for all locations.

## `breed` (type: `string`):

Optional exact AKC calendar breed label, such as Golden Retrievers. Primarily applies to conformation event searches.

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

Maximum number of date/count records to save across all selected event types.

## Actor input object example

```json
{
  "month": "2026-09",
  "eventTypes": [
    "AG"
  ],
  "states": [
    "CA"
  ],
  "maxItems": 20
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dated event counts matching the selected month, event types, states, and breed.

# 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 = {
    "month": "2026-09",
    "eventTypes": [
        "AG"
    ],
    "states": [
        "CA"
    ],
    "breed": "",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/akc-events-calendar").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 = {
    "month": "2026-09",
    "eventTypes": ["AG"],
    "states": ["CA"],
    "breed": "",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/akc-events-calendar").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 '{
  "month": "2026-09",
  "eventTypes": [
    "AG"
  ],
  "states": [
    "CA"
  ],
  "breed": "",
  "maxItems": 20
}' |
apify call automation-lab/akc-events-calendar --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/akc-events-calendar"
        }
    }
}

```

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/7jd5i6wCCEupQ9iAH/builds/UDdCgnaVvQJzX182z/openapi.json
