Your listings say "Mon-Fri 9-5, Sat 10-2, closed Sun". Your database needs intervals, your site needs schema.org JSON-LD, and your map needs OSM opening_hours. One POST does all three — deterministic, no LLM, no hallucinated hours.
Click "Parse hours" to see the JSON response.
| Field | Use it for |
|---|---|
days | Per-weekday open/close intervals in minutes — drop straight into your DB or booking logic. |
schema_org | openingHoursSpecification JSON-LD. Paste into your page and Google can show hours in the rich result. |
osm_opening_hours | Canonical OpenStreetMap syntax for map/POI pipelines. |
confidence + unparsed_segments | Know exactly which rows need a human. No silent wrong answers. |
curl -X POST https://smeltworks.com/openhours/v1/parse \
-H 'content-type: application/json' \
-d '{"text":"Mon-Fri 9am-5pm, Sat 10-2, closed Sunday"}'
POST /openhours/v1/parse — one string → structured hours
POST /openhours/v1/open-now — add timezone, get open/closed + next transition
POST /openhours/v1/bulk — up to 500 strings per call
GET /openhours/pricing · GET /openhours/health · interactive docs at /docs
Send your key as the X-API-Key header. Anonymous use is free up to 100 requests/day.
| Plan | Included | Price |
|---|---|---|
| Free | 100 requests/day, no signup | $0 |
| Starter | 10,000 requests/month, API key | $9/mo |
| Growth | 100,000 requests/month, bulk endpoint, priority email | $29/mo |
After checkout, email your Stripe receipt number to [email protected] and your API key is issued by reply. Cancel any time from the Stripe receipt link.
Same parser, one output format each. Handy for a one-off conversion.
Because real hours strings contain "Tues thru Sat", "11:30a-2p & 5-10", "closed Mon", "open 24 hours", en-dashes, split shifts, and midnight wraps. This parser handles those and, critically, tells you when it didn't understand something instead of guessing. 18 regression tests cover the messy cases.