AtlasCare APIpromo.atlascare.ca ↗
Retrieve AtlasCare's HVAC, water heater, and plumbing service catalogue, fetch per-service promo details, and submit quote requests via 3 API endpoints.
What is the AtlasCare API?
The AtlasCare Promo API provides 3 endpoints covering the heating, cooling, water heater, and plumbing services listed on promo.atlascare.ca. Use list_services to pull the full service catalogue organized by category, get_service to retrieve landing-page details for any individual service including its current promotional offer, and submit_quote_request to programmatically submit a booking inquiry on behalf of a user.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/71411938-2642-43af-a40b-ca9a668ba6a4/list_services' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace promo-atlascare-ca-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: AtlasCare promo services — browse the catalogue and inspect landing-page details."""
from parse_apis.promo_atlascare_ca_api import AtlasCare, InputNotFound
client = AtlasCare()
# Browse service categories and their entries
for cat in client.categories.list(limit=5):
print(cat.name)
for svc in cat.services:
print(f" {svc.name} ({svc.slug})")
# Drill into the first service's full landing-page detail via summary navigation
first_cat = client.categories.list(limit=1).first()
if first_cat is not None and first_cat.services:
summary = first_cat.services[0]
detail = summary.details()
print(detail.name, detail.headline)
print("Highlights:", detail.highlights)
if detail.offer is not None:
print("Offer:", detail.offer.title)
print("Phone:", detail.phone, "| Line:", detail.service_line)
# Same service via direct point lookup using the discovered slug
try:
service = client.services.get(slug=summary.slug)
print(service.name, service.tagline)
except InputNotFound:
print("Service page no longer available")
print("exercised: categories.list / ServiceSummary.details / services.get")
Returns the full service catalogue as shown in the site's main navigation: service categories (Heating, Air Conditioning, Water Heaters, Plumbing), each with its services (name, slug, landing-page URL). A service can appear under more than one category (one shape: Heat Pump Installation under both Heating and Air Conditioning). Also returns quote_product_categories, the exact product-of-interest options accepted by submit_quote_request. One page load; no pagination.
No input parameters required.
{
"type": "object",
"fields": {
"categories": "array of service categories, each {name, services[]} where services[] items carry name, slug (input for get_service) and url",
"total_services": "integer count of service entries across all categories (duplicates across categories counted each time)",
"quote_product_categories": "array of strings: the product_category values accepted by submit_quote_request"
},
"sample": {
"data": {
"categories": [
{
"name": "Heating",
"services": [
{
"url": "https://promo.atlascare.ca/heating-repair/",
"name": "Repair",
"slug": "heating-repair"
},
{
"url": "https://promo.atlascare.ca/furnace-installation/",
"name": "Furnace Installation",
"slug": "furnace-installation"
}
]
},
{
"name": "Plumbing",
"services": [
{
"url": "https://promo.atlascare.ca/sump-pumps/",
"name": "Sump Pumps",
"slug": "sump-pumps"
}
]
}
],
"total_services": 18,
"quote_product_categories": [
"Heating Repair",
"Heating Install",
"Heat Pump Install",
"Cooling Repair",
"Cooling Install",
"Water Heater Install",
"Clogs, Drains & Pipe Services",
"Other Plumbing Services"
]
},
"status": "success"
}
}About the AtlasCare API
Service Catalogue
list_services returns the complete service catalogue with no required inputs. The response groups services into categories such as Heating, Air Conditioning, Water Heaters, and Plumbing. Each service entry carries a name, a slug (used as input to get_service), and a url. The total_services integer counts all entries across categories, including any service that appears under more than one category. The response also includes quote_product_categories, the exact string values accepted by submit_quote_request.
Per-Service Landing Page Details
get_service accepts a single required parameter, slug, matching a value from list_services. It returns the page's headline (h1), tagline, and an highlights array of bullet-point selling points. The offer object contains title and terms for any active promotion; when no offer block appears on the page, offer is null. The response also exposes the phone number in E.164 format, the quote_form_heading, and service_line (either HVAC or Plumbing), indicating which service line the page's quote form files requests under.
Quote Request Submission
submit_quote_request is a live form submission. Required fields include first_name, last_name, email, phone, postal_code, product_category, and consent (must be true). The product_category value must exactly match one of the strings returned by list_services.quote_product_categories. An optional message field carries free-text describing the request. On success, the response returns submitted: true, a status of mail_sent, and the site_message acknowledgement text. Because this submits a real request to AtlasCare, it should only be called for genuine inquiries.
The AtlasCare API is a managed, monitored endpoint for promo.atlascare.ca — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when promo.atlascare.ca changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official promo.atlascare.ca API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Display a categorized directory of AtlasCare's HVAC and plumbing services using the
list_servicescategory and slug data. - Surface active promotions on a comparison or deal-aggregation site by iterating slugs through
get_serviceand checkingofferfields. - Pre-populate a quote form on a partner or affiliate site and submit it programmatically via
submit_quote_request. - Build a service-picker widget that shows
highlightsandheadlinecopy for each service before a user requests a quote. - Monitor promotional offers across all service pages by periodically calling
get_servicefor each slug and tracking changes tooffer.title. - Validate which
product_categorystrings are currently accepted before submitting a quote request, usingquote_product_categoriesfromlist_services.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does AtlasCare provide an official public developer API?+
What does `get_service` return when a service page has no active promotion?+
offer field is returned as null when the page shows no offer block. All other fields — headline, tagline, highlights, phone, service_line, and quote_form_heading — are still returned regardless of whether a promotion is present.Does the API expose service pricing or equipment cost estimates?+
offer.title and offer.terms), service highlights, and contact details. You can fork this API on Parse and revise it to add an endpoint targeting any pricing content if AtlasCare adds it to the promo site.