AKC Events Scraper
Pricing
from $1.24 / 1,000 akc event dates
AKC Events Scraper
Search the public AKC Events Calendar by month, event type, breed, and state. Export dated event counts and drill-down URLs for competition monitoring.
Pricing
from $1.24 / 1,000 akc event dates
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
23 days ago
Last modified
Categories
Share
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 to six consecutive months per run, starting at an explicit
YYYY-MMor the current UTC month; - 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
- Open the Actor input page.
- Omit the month for the current UTC month, or enter an explicit
YYYY-MM; optionally setmonthCountfrom 1 to 6. - Add one or more event type codes.
- Optionally add state codes such as
CA,TX, orNY. - Optionally enter an exact AKC breed label such as
Golden Retrievers. - Set
maxItemsand start the run. - Export the default dataset as JSON, CSV, Excel, or XML.
A useful first run is:
{"monthCount": 2,"eventTypes": ["AG"],"states": ["CA"],"maxItems": 100}
Input parameters
month
First calendar month in YYYY-MM format. Omit it to use the current UTC month, including in recurring Tasks. Explicit historical months remain supported. Existing Tasks with an explicit month keep that month until you edit them.
monthCount
Integer from 1 to 6, default 1. Searches proceed by month chronologically, then by event type in input order, with December rolling into January. For example, { "month": "2026-12", "monthCount": 2, "eventTypes": ["AG"], "maxItems": 100 } illustrates a December–January horizon; those dates are illustrative, not a dynamic default.
eventTypes
One or more supported AKC codes. Common values include:
CONF— Conformation: All-Breed and GroupS— Conformation: SpecialtyAG— Agility TrialsOBED— Obedience TrialsRLY— Rally TrialsSCWK— Scent WorkFCAT— Fast CATHT— Hunting TestsHE— Herding Tests and TrialsTRK— Tracking Events
The input validator rejects unknown codes instead of silently returning misleading empty output. Codes are trimmed, case-insensitive and deduplicated in input order. Omitting or supplying an empty list uses CONF at runtime; the Console input form retains its AG default.
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 globally across all months and event types, from 1 to 5,000 (default 100; zero is not unlimited). The Actor stops before exceeding this limit or the available charge budget. A row is a date/type/count combination, not an individual event.
Run summary and snapshot completeness
The Output tab links to uncharged RUN_SUMMARY JSON in the default key-value store. It includes resolved months, eventTypes, states, breed/breedCode, maxItems, savedRows, requestedSearches, completedSearches, skippedSearches, and per-search month/type/status, matching and saved row counts. matchingRows: null means a response was not successfully parsed.
complete: true,reason: "complete"means all requested searches completed and all matching rows were saved; zero rows can be a genuine empty snapshot.truncated: true,complete: falsemeans rows or unqueried searches may be omitted. At the cap, skipped searches are conservatively considered truncation even if they might have been empty. If the final search returns exactly the cap and no work is omitted, it is complete.reason: "max_items"or"charge_budget"identifies a normal bounded stop.reason: "failure"preserves partial work and never claims completeness. The run fails; saved rows remain available. Checkpoints use"in_progress"while work is ongoing; abrupt termination may leave that checkpoint, not a final receipt. Input-validation failures occur before a summary is available.
The summary is metadata, not an additional dataset item or item charge. Use it alongside the run's terminal status before treating a dataset as a full snapshot.
Example output
A California scent work search can return:
{"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, records outside the queried month, and the run summary are not charged as items. Pricing and date-count charge units are unchanged for multi-month runs.
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:
- Save one Task per event type, state group, or breed.
- Schedule it monthly or weekly in Apify Console.
- Send each run's dataset to Google Sheets, Make, Zapier, or a webhook.
- Compare date/count pairs with the previous run.
- 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
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 '{"monthCount":2,"eventTypes":["AG"],"states":["CA"],"maxItems":100}'
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({monthCount: 2,eventTypes: ['AG'],states: ['CA'],maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient(token="<APIFY_TOKEN>")run = client.actor("automation-lab/akc-events-calendar").call(run_input={"monthCount": 2,"eventTypes": ["AG"],"states": ["CA"],"maxItems": 100,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use AKC Events Scraper through MCP
Add the Apify MCP server to Claude Code:
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:
{"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 each queried month are removed even when the calendar endpoint returns adjacent weeks. Every received row is validated before filtering or limiting; malformed/error-shaped responses cannot masquerade as an empty snapshot.
- Network failures, timeouts, HTTP 429 and 5xx get at most three total attempts with bounded backoff; other non-200 statuses fail promptly. No browser/proxy fallback is enabled.
- 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.
Failure diagnostics and privacy
Failed operations send sanitized diagnostic input, exceptions, and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL queries are removed; reports are retained for 30 days. No credentials or private response bodies are included in the run summary.
No AI/model provider is used. AKC receives only the public calendar filters needed for each request. Dataset records and RUN_SUMMARY remain in your Apify run storage under your account's retention settings; you can delete them in Console or through the storage API. The Actor maintains no separate history, cache, or session store. Our private diagnostic reports expire after 30 days. For help, open an issue on this Actor's Apify Store page.
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 RUN_SUMMARY and the run status. maxItems applies across all months and event types, not separately to each search; the charge budget can also stop output.
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.