- Brand
- Unknown
- Category
- Pending
- Primary Subcategory
- Pending
Integration details
Description
AlertCamp watches fully-booked parks and tells you the moment a cancellation frees something up — a campsite, a cabin, a backcountry permit or a day-use slot. Create an alert for a park and date range in conversation, then check back on what has opened. Covers Parks Canada, the provincial systems, Recreation.gov and state parks including California, Florida and Michigan. Requires an AlertCamp account; you approve the connection in the AlertCamp app or in your browser at app.alert.camp.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Category
- Pending
- Primary Subcategory
- Pending
- Secondary Subcategories
- None listed
- Brand
- Unknown
- Access
- Account required
- First tracked
- 2026-11-06
- Tool count
- 26
- Market
- US
The broad Category that contains the Primary Subcategory.
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for AlertCamp
Get updates when AlertCamp’s Discoverability Score or category rank changes.
Competitive lineup
26 tools agents can invoke
Watch a park for cancellations and notify the user when a matching stay opens up. TWO QUOTAS can refuse this. The tier quota limits ACTIVE alerts and total watched sites. Separately, a user may hold at most 100 alerts in TOTAL — paused and expired ones included — and at that cap nothing new can be created until some are deleted (pausing does not help). list_my_alerts reports both, and a refusal here returns the same numbers in its structuredContent alongside the message. NOT FOR ROUTE BACKCOUNTRY. Where a park sells backcountry as a traverse — a different site each night — this tool refuses it, because the app offers no plain backcountry alert there and the owner could not inspect or edit one. get_park reports supports_routes: true for those parks; call create_itinerary instead, and note a ONE-NIGHT route is the normal way to watch a single backcountry night, not a workaround. THREE DATE MODES — pick the one the inventory uses, or the alert can never match: 1. Nights (most camping). date_start/date_end are a SEARCH WINDOW, not the stay: date_end is the last night that may be booked, and nights_min is the shortest stay worth notifying about. 2. Entry date (Quetico backcountry, Recreation.gov wilderness permits). These sell ONE ENTRY DATE against a daily quota, not a run of nights — asking for 1 night and 5 returns identical availability. Pass entry_dates with the exact dates wanted; date_start/date_end are then derived from them. A nights-based alert on this inventory NEVER matches. get_park reports backcountry_is_entry_date: true for these parks. 3. Day use (parking time slots, shuttles, Ontario Parks daily vehicle permits). These sell a SLOT or PERMIT on a given day. Pass day_use_cells as {site_id: [dates]}. A park offering this has DayUse in its camp_types. Ontario permits go on sale 5 days ahead; an alert for a later day is accepted and starts matching when the day is released. Use list_park_campgrounds first to get campground ids, then list_campground_zones — for GoingToCamp parks the ZONES are the campgrounds a person names, so a park-wide selection is both imprecise and the largest thing you can ask for. Within a campground, pass ["all"] for zone_ids/site_ids to watch everything, or specific ids to narrow. Every id must be an ID, never a name, and must belong to the park you name. If this is refused for SIZE, narrowing is the remedy: fewer zones, or specific site_ids. Falling back to the whole park makes the selection bigger and will fail again. tier_label is the plan's real name — "essai" is French for trial and is NOT one; it is the permanent free plan. Site caps are READABLE — max_sites_per_alert comes back from list_campground_zones for a campground and from get_alert for an existing alert, and it is per PROVIDER: the same free plan is 200 sites on Ontario Parks and 1 on Oregon State Parks, because a GoingToCamp scan reads a campground in one request while an Aspira scan costs one request per site. The number is readable, so it never has to be established by experiment: a throwaway alert spends a quota slot, and pausing a live one switches off the user's watch. RESOLVE EVERY NARROWING INTO site_ids BEFORE creating this. If the user asked for a shaded site, one near the water, one with a fire pit or 50-amp power, read the attributes from list_zone_sites and pass the ids that qualify — do not pass ["all"] and describe the narrowing in prose. The reason is the OTHER client: the account holder opens this alert in the AlertCamp app, which lists the sites it watches and has no way to show a filter. An alert on ["all"] looks like an alert on everything, cannot be checked, and cannot be edited back. An explicit list is visible, verifiable and editable by the person who owns it. Same for position: if the ask was about the beach, the water or a quiet corner, pick the ids from get_zone_map or the lat/lng in list_zone_sites. An alert on the whole zone will notify them about every site in it, including the ones they ruled out.
create_alert
Watch a MULTI-NIGHT TRAVERSE — a trip needing a different zone each night, which create_alert cannot express. Use this whenever the user describes moving camp: 'four nights across the Rockwall', 'the Skyline end to end'. TWO WAYS TO SPECIFY IT: 1. PLANNED (prefer this). Call list_routes, pass the chosen variant's id as route_id, and OMIT nights — they are filled in from the route. park_id comes with it too. 2. CUSTOM. Pass nights yourself: an ordered list, one entry per night, each naming a campground_id and the zone site_ids that would satisfy it. A night's site_ids are an OR-set — 'night 2 can be Numa Creek OR Tumbling Creek' is one alert, not two. 'all' is refused: a route needs explicit zones. THE WINDOW IS A SEARCH WINDOW, not the trip. Every start day between window_start and window_end is tried, so a wider window is more chances to fire. It must span at least as many days as the route has nights, or nothing could ever match. A route counts as ONE alert against quota however many nights it runs, and its legs never appear in list_my_alerts. REFUSALS ARE INFORMATIVE, not retryable. A custom route can be refused as not walkable (non-adjacent zones), as mixing accommodation types that are booked separately, or as mixing single-permit traverses — a permit is one booking for the whole trip. Re-sending the same nights will be refused again: offer a planned route, or nights the provider can actually sell together.
create_itinerary
Permanently remove a route and stop watching every night of it. PREFER pause_itinerary when the user may want it back — pausing keeps the nights and is reversible, and the nights cannot be rebuilt by editing. A deleted route has to be planned again from scratch, and its nights cannot be rebuilt by editing. Ask the account holder which routes they mean before deleting any you did not just create for them in this conversation.
delete_itinerary
Permanently remove an alert from the user's list. PREFER pause_alert when the user may want it back — pausing keeps the configuration and is reversible. Deleting is nonetheless necessary, not just tidy: a user may hold at most 100 alerts INCLUDING paused and expired ones, and once that cap is reached nothing new can be created until some are deleted. Deleting is PERMANENT and takes the alert's scan history and accumulated odds with it; a recreated alert starts from zero. Ask the account holder which alerts they mean before deleting any you did not just create for them in this conversation — they may hold alerts they never mentioned, and "delete my alerts" is not an instruction to empty the list.
delete_alert
Change a route's window, party size, tent pads or notification channels. THE NIGHTS CANNOT BE EDITED. Their order and adjacency are validated as a whole when the route is created, so changing one in isolation could leave a trip the provider will not sell. To walk a different line, delete this route and create a new one — and say that is what you did. Widening the window is the single most useful edit: more candidate start days is more chances to fire. Send window_start and window_end TOGETHER — one alone is merged with the stored value and may end up too short for the route's length.
update_itinerary
Change an existing alert instead of replacing it. Dates, nights, notifications, party size, activity and equipment can all be edited, and the campground_selections can be NARROWED. Prefer this over delete-and-recreate: an alert carries its scan history and accumulated odds, a recreate throws both away and leaves the user unwatched in between. Prefer it over a second alert too — every alert costs a slot against the tier limit and the 100-alert cap. SELECTIONS ONLY NARROW. You may remove sites, zones or campgrounds; you may not add any, and you may not change the park. Quota is priced on what an alert watches, so an edit that grew a selection would route around the check that priced it. To watch MORE, create a second alert, or delete this one and create it again with the full list — and say which you did. Omit a field to leave it alone; pass null to clear one.
update_alert
The dates a DAY-USE grid offers (start / end), the max_span_days one alert may cover, and closed_cells — the slot/date pairs whose booking window has already shut. Call this before setting day_use_cells. Day use is the one inventory whose season appears NOWHERE in the provider's API — only in the availability grid, and it moves when the next season is released — so dates chosen without it are a guess, and a guess outside the window is an alert that can never match. Where the permits go on sale at a published time, list_zone_sites returns next_release_at for the zone. AlertCamp force-checks the target the moment that instant passes, so a user does not need to be at their phone for the drop — AlertCamp polls on the drop itself. Day use also dies during its own arrival day: each slot has its own cutoff, so a date being in the future does not make it live. Skip anything in closed_cells.
get_day_use_window
The drawn site map as an IMAGE, plus the pixel position of every site on it — the same sheet the app shows a person, with the SITE NUMBERS drawn on at their stored pins. Use it for questions the rows cannot answer in words: which sites sit by the water, at the end of a loop, away from the road. Amenity icons on these sheets have no machine-readable labels, so read the picture as the user would, then convert what you see back into site ids with the coordinates returned alongside it. Say which sites you picked and why, so the user can disagree with your reading. The numbers are OURS, not the provider's — these sheets are published without them — so name sites by those numbers and call again with your shortlist as highlight_site_ids. Some clients display an image returned by a tool and some discard it, and this call cannot report which happened — so whether the user is looking at this sheet is unknown here. Every map also carries an image_url to the same labelled picture, which works in any client and can be passed on: offer it rather than assuming the image arrived. Findings stated in words stand on their own either way. Takes a zone_id, or a campground_id for every sheet in it. Where a campground ships one sheet for all its zones, that sheet is returned for any zone within it. NOT every inventory has one, and its absence is not a dead end: geographic inventories (Recreation.gov, the Aspira tenants, the UseDirect states) carry real lat/lng per site instead, which list_zone_sites returns and which you can reason about without a picture. This tool says so explicitly rather than failing. has_map on list_campground_zones tells you in advance.
get_zone_map
One alert with its scan metrics and, in site_limits, what this alert may watch on ITS provider — read that before offering to widen a selection. NOTE: scan_count and last_checked_at are a MINIMUM across the alert's polling targets, which are scanned independently and phase-staggered — so a fresh multi-zone alert can legitimately show scan_count 0 with a timestamp that predates its own creation. That is the laggard target, not a fault.
get_alert
Full detail for a single park: provider, activities, coordinates, booking URL, whether its backcountry is sold as zones rather than numbered sites, and backcountry_is_entry_date — which decides whether an alert here uses entry_dates or a nights range.
get_park
One route with its per-night legs, each night's zone, and any openings found so far. Each opening carries a status saying what became of it, in the same three words list_matches uses: rebooked (a sweep saw one of its nights taken), open_at_last_scan (seen whole at status_as_of, which is when we LOOKED) and unverified (the alert is paused or deleted, so nothing is known after that). status_meaning in the result spells them out. This is how to answer “is it still available” — there is no live check.
get_itinerary
Zones within a campground — the level at which most inventories are actually organised. In many of them one campground row holds the several campgrounds a person would name (Sandbanks is one row holding Outlet River A and B, Cedars, Woodlands and West Lake A/B/C), so stopping at list_park_campgrounds can make a park look like a single undifferentiated site pool. Elsewhere a campground has one default zone and this simply confirms it. Call this before create_alert whenever the user names a part of a park ("near the beach", "the quiet loop", a campground by name), and pass the zone ids in campground_selections. Also returns the caller's site caps for this provider and tier: max_sites_per_alert is what ONE alert may watch, and each zone's site_count says whether a selection fits. A park-wide selection is the BIGGEST one available, so it is the wrong fallback when a narrower one was refused for size. A zone answers "which campground", NOT "which site". If the user named somewhere INSIDE one — the beach, the waterfront, a quiet loop, near the washrooms, away from the road — picking the right zone is half the answer, and the sites within it still differ. Where has_map is true, call get_zone_map before create_alert and choose site_ids from it; where the sites carry lat/lng, list_zone_sites gives you the same thing in coordinates. Watching the whole zone is a fine fallback, but say that is what you did.
list_campground_zones
Campgrounds within a park, including Parks Canada day use and Recreation.gov permit areas. A campground is what an alert watches; its zones and sites are the bookable inventory.
list_park_campgrounds
Pre-planned multi-night traverses for a park — the Rockwall, the Skyline, a coastal loop — grouped by trail, each with the paces it can be walked at ('Rockwall, 4 nights' and 'Rockwall, 3 nights' are two variants of one trail). START HERE for any multi-night trip. Pass a variant's id to create_itinerary as route_id and its nights come with it — you do not have to restate them. A curated route also SKIPS the adjacency check, because it follows a real trail and is connected by construction. An empty list is the NORMAL answer for most parks, not an error: it means no route has been planned there, and a custom one is the only option. Providers that enforce zone adjacency will refuse a custom route unless their trail graph has been crawled, so if create_itinerary refuses one, that is why — offer a planned route instead of retrying.
list_routes
The equipment vocabulary an alert can filter on, for the park's provider. Each entry is a sub_equipment_id (a per-provider integer — Recreation.gov spells "Trailer/RV up to 30 ft" as -18013), a name, and a kind of 'tent' or 'rv'. Call this whenever the user describes what they are camping IN — a tent, a van, a 30-foot trailer. You cannot set the equipment filter without it, and guessing the integer sets the wrong one silently. A length-bracketed option means AT MOST that length: a 30-foot trailer takes the 30 ft bracket, never the 35.
list_equipment_options
Individual sites in a zone, for a site-level alert. Returns each site's id, number, camp type, and its position — `lat`/`lng` where the inventory is geographic (Recreation.gov, the Aspira tenants, the UseDirect states), or `map_x`/`map_y` pixels where it ships a drawn map sheet instead. A site has one or the other, never both. Paginated: a zone can hold hundreds (Outlet River A has 176), so `total` may exceed what one call returns — use offset to continue. When the zone's inventory opens at a published instant, next_release_at gives it. AlertCamp polls ON that drop and notifies within a tick, which is what the alert replaces sitting at a phone for it. Each site also carries its SEASON where the provider publishes one ("Apr 15 to Oct 14"), which is year-less and repeats annually. Check it before picking dates: an alert outside the season scans for months and can never match, and says nothing about why. Where the provider publishes them, each site also carries what it is LIKE — shade, proximity_to_water, has_fire_pit, electricity_amps, capacity_rating, driveway_surface. These are how you answer "a shady one" or "lakefront with 50 amp": filter the rows yourself and pass the qualifying site_ids to create_alert. Absence means UNSTATED, not absent, so say how many sites actually carried the attribute you used. For position rather than amenity — near the water, the beach, the washrooms — use lat/lng where the inventory is geographic, or the sheet get_zone_map returns where it is pixel.
list_zone_sites
The signed-in user's cancellation alerts, newest first. Each carries its park, date window, nights, and whether it is currently active. PLAN NAMING: the tier value "essai" is French for "trial", but the plan is the permanent FREE tier — no expiry, no card, no countdown. tier_label carries the name the app shows for it, which is "Free". PLAN CHANGES: no tool here changes a plan. Subscriptions are in-app purchases, which Apple and Google require to go through their own billing, so only the account holder can change one, and only in the AlertCamp app on their phone. The remedies these tools can apply to a limit are narrowing a selection, pausing, and deleting. ROUTES ARE NOT IN THIS LIST. A multi-night traverse is a separate kind of alert whose per-night legs are excluded here, so a user with routes watches more than this shows — quota.route_alerts says how many, and list_my_itineraries returns them. Check it before summarising what they watch or suggesting something be deleted. Also returns quota: total_alerts counts every alert INCLUDING paused and expired, max_total_alerts is the hard cap, and remaining is what is left. When remaining reaches 0, create_alert fails until alerts are deleted — pausing does not free a slot.
list_my_alerts
The user's multi-night ROUTE alerts — a traverse that needs a different site each night (Parks Canada and BC backcountry, Recreation.gov itinerary permits). list_my_alerts CANNOT show these. A route is a parent plus one leg per night, and the legs are excluded from every alert listing so a four-night traverse does not read as four alerts. So call this too before telling the user what they are watching, before counting their quota, and certainly before suggesting they delete something to free a slot. A route counts as ONE alert against quota however many nights it runs. Each opening carries a status saying what became of it, in the same three words list_matches uses: rebooked (a sweep saw one of its nights taken), open_at_last_scan (seen whole at status_as_of, which is when we LOOKED) and unverified (the alert is paused or deleted, so nothing is known after that). status_meaning in the result spells them out. This is how to answer “is it still available” — there is no live check.
list_my_itineraries
Openings the user's alerts have found, newest first. This is how an agent CHECKS IN on an alert it created — MCP has no way to push, so nothing will arrive on its own. Pass `since` (the `cursor` from a previous call) to get only what is new. Without it you get the most recent matches, which may include ones the user has already seen and acted on. A match is a snapshot of what was free when the scan ran, and every row carries a status saying what became of it. rebooked means a later scan saw the site taken again — it is gone, and rebooked_at says when. open_at_last_scan means we are still watching and have not seen it taken as of status_as_of, which is the last time we LOOKED, not a live check. unverified means the alert is paused, deleted or past its window, so nothing is known after status_as_of. Report the status and its timestamp rather than calling a stored opening bookable: campsite cancellations are frequently rebooked within minutes. Openings arrive as site numbers, which say nothing about where a site IS. If the user cares about position, get_zone_map (drawn inventories) or the lat/lng from list_zone_sites (geographic ones) locates the sites named here, so you can lead with the ones they actually want.
list_matches
Stop watching a route, parent and every night together — pausing has to be atomic or the route keeps polling some nights it can never complete. Reversible with resume_itinerary. pause_alert does NOT work on a route.
pause_itinerary
Stop monitoring without deleting. Reversible with resume_alert. A paused alert keeps its configuration and frees no quota until it expires.
pause_alert
The account's MASTER SWITCH. While it is on, nothing is scanned and no notification is sent, whatever each alert's own is_active says — the scheduler skips the account entirely. This is the whole account, not one alert: pause_alert is the per-alert one. It is reversible with resume_all_alerts and changes no alert's configuration. It is also SILENT. A user whose alerts are paused sees them listed as usual and simply never hears anything, so this is for someone who has said they are done looking for now — the end of a season, a trip booked — not a way to quieten one noisy alert.
pause_all_alerts
Resume monitoring. Re-checks quota, so it can be refused if the user has since filled their tier with other alerts.
resume_alert
Start watching a paused route again.
resume_itinerary
Turn the account's master switch back off, so its alerts are scanned again. Openings found during the pause are NOT replayed: the first cycle after resuming is suppressed deliberately, so the user gets what is free from now on rather than a burst of history. Each alert keeps whatever is_active it had, so one paused individually stays paused.
resume_all_alerts
Find parks by name across every supported provider (Canadian provincial/federal parks plus US Recreation.gov, UseDirect and AspiraOne tenants). Returns each park's id, provider and the activities it offers. Use the returned park id with the other tools. backcountry_is_entry_date marks a park whose backcountry sells an ENTRY DATE rather than nights — those need create_alert's entry_dates, not a nights range. DayUse in camp_types marks day-use inventory (parking slots, shuttle seats, daily vehicle permits), which needs day_use_cells.
search_parks
AlertCamp ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve AlertCamp's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.


