Appliance Age — Real data. Real answers.

APPLIANCEAGE API

Put an appliance age finder in your app or website.

One call returns when an appliance was made, how sure we are, and whether it has been recalled in Canada or the United States. Send a brand and serial number, or just a photo of the label. We keep the serial-number rules and the recall data up to date, so you never have to.

We do the upkeep

Manufacturers change their date codes. We track hundreds of brands of appliances, furnaces, air conditioners and water heaters, review what our users report, and fix rules for everyone at once.

Recalls included

Every lookup is checked against Health Canada, U.S. CPSC and U.S. NHTSA notices, refreshed every night, including the affected model and serial ranges.

Photo or typed

Send the serial, or send a photo of the rating label and we read the brand, model and serial for you. Same price either way.

Pay for answers, not attempts

You are charged only when we find a date. No monthly minimum, no setup fee, cancel any time.

Honest results

Each answer says where the date came from and how strong the evidence is, and lists other possible years when a date code repeats.

Canada and the U.S.

Built in Canada for both markets, with the recall sources of both countries.

Built for

Home inspection and property software, real estate platforms, insurers and home warranty companies, property managers, appliance repair and HVAC services, and parts and replacement retailers.

Pricing

  • Free: 15 successful lookups a month, to build and test.
  • Pay as you go: US$0.10 per successful lookup after the first 15 each month, billed monthly. A lookup that finds no date is never charged.
  • High volume: custom pricing, higher limits and a direct line to us. Talk to us.

Documentation

1. Get a key

Create a free account and create a key. The key is shown once; keep it secret and use it only from your server, never in a web page or app that others can download.

Send it in the Authorization header as Bearer <key>, or in an X-Api-Key header. Keys in the web address are refused.

2. Look up an appliance

GET or POST https://api.applianceage.com/v1/decode

makeRequiredThe brand on the label, for example "Whirlpool".
serialRequiredThe serial number.
modelOptionalThe model number. Improves recall matching.
manufactureDateOptionalA date printed on the label, if there is one.
applianceTypeOptionalFor example "Dishwasher". Narrows the recall search.
curl -X POST "https://api.applianceage.com/v1/decode" \
  -H "Authorization: Bearer $APPLIANCEAGE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"make":"Whirlpool","serial":"F91720000","model":"WDT730PAHZ0"}'
// JavaScript (server side)
const res = await fetch("https://api.applianceage.com/v1/decode", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.APPLIANCEAGE_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ make: "Whirlpool", serial: "F91720000" }),
});
const { result } = await res.json();
console.log(result.date.year);
# Python
import os, requests
r = requests.post("https://api.applianceage.com/v1/decode",
    headers={"Authorization": f"Bearer {os.environ['APPLIANCEAGE_KEY']}"},
    json={"make": "Whirlpool", "serial": "F91720000"})
print(r.json()["result"]["date"]["year"])

3. Or send a photo of the label

POST https://api.applianceage.com/v1/photo

Send image: the label photo as base64 (JPEG, PNG, WebP or HEIC, 8 MB or less). Add make, model, serial or applianceType if you know them. We read the brand, model and serial from the photo, then run the same lookup. The photo is deleted as soon as it has been read. Pricing is the same as a typed lookup.

curl -X POST "https://api.applianceage.com/v1/photo" \
  -H "Authorization: Bearer $APPLIANCEAGE_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"image\":\"$(base64 < label.jpg | tr -d '\n')\"}"

The response

{
  "result": {
    "version": 1,
    "status": "completed",
    "identity": { "make": "Whirlpool", "model": "WDT730PAHZ0", "serial": "F91720000", ... },
    "date": {
      "year": 2019, "month": 4, "week": null, "ageYears": 7,
      "basis": "serial_rule", "evidence": "strong",
      "alternatives": [], "ambiguity": "none", "warnings": []
    },
    "recall": {
      "state": "no_match_found", "matches": [],
      "datasetDate": "2026-10-04", "regions": ["CA", "US"],
      "manufacturerPage": { "company": "Whirlpool Corporation", "url": "https://www.whirlpoolcorp.com/recall.html" }
    }
  },
  "billable": true,
  "usage": { "month": "2026-10", "successful": 12, "attempts": 14 }
}
  • date.year is null when no date could be found. Such a lookup is not charged (billable: false).
  • date.basis: printed_on_label, user_provided, serial_rule or none.
  • date.alternatives lists other possible years when a brand's date code repeats every 10 or 20 years.
  • recall.state: match_confirmed, match_possible, no_match_found, or a not_checked_… reason. Recalls come from Health Canada, U.S. CPSC and U.S. NHTSA notices.

Other endpoints

  • GET https://api.applianceage.com/v1/brands — supported brands and whether each has a serial-number rule.
  • GET https://api.applianceage.com/v1/usage — this month's successful lookups and estimated cost.

Errors

Errors return {"error": {"status": 401, "message": "…"}}.

400make or serial is missing, or the image is not valid base64.
413The photo is larger than 8 MB.
415The photo is not JPEG, PNG, WebP or HEIC.
401The key is missing, wrong or revoked.
429The free monthly allowance is used up (add a card to continue), or too many requests today.
503The API is temporarily unavailable.

Talk to us about volume

Planning thousands of lookups, or want the age finder in your product? Tell us about it.