Israel Opening Hours
July 30, 2026 · View on GitHub
Check opening hours for Israeli businesses, including the common case where the hours are stated relative to Shabbat rather than the clock.
If a shop says "פותח שעה אחרי צאת השבת" and it's in Tel Aviv, this works out what time that actually is — for whichever Saturday you're asking about.
The problem
Google Business stores opening hours only as fixed clock times. It has no way to say "closes before Shabbat". Israeli merchants set their Friday and Saturday entries once and rarely revisit them — but candle lighting moves by about an hour and forty minutes between midwinter and midsummer, and differs by ~20 minutes between Jerusalem (40 min before sunset), Haifa and Zikhron Ya'aqov (30 min), and everywhere else (20 min).
So Google's Friday time is often wrong for the week you're asking about, and its
Saturday: Closed hides the motzei-shabbat reopening that you probably care
about. This plugin collects what the sources state, works out the rule behind
it, and evaluates that rule against the real calendar.
Sources
| Source | Role | Access |
|---|---|---|
| Google Business (Places API v1) | Highest coverage; phone, address, Sun–Thu hours | API key, "Places API (New)" enabled |
| easy.co.il | Merchant's own Hebrew hours text, Shabbat phrasing intact | Browser only — Cloudflare JS challenge |
| Hebcal | Candle lighting, havdalah, sunset, tzeit, holiday classification | Free REST, no key |
Skills
| Skill | Purpose |
|---|---|
check-opening-hours | Main entry point. Orchestrates the others and answers the question. |
shabbat-anchors | Calendar boundary times and day classification for a city and date range. |
google-business-hours | Places API lookup. |
easy-co-il-lookup | Directory lookup, browser-driven. |
hours-rules-authoring | Write the rules file that encodes what the hours mean. |
Quick start
# What kind of days are these, and what are the boundary times?
python3 scripts/israel_hours.py anchors --city jerusalem --from 2026-09-10 --days 7
# Resolve a business's rules into concrete windows
python3 scripts/israel_hours.py resolve \
--rules examples/makolet-jerusalem.json --from 2026-09-10 --days 6
# Is it open right now?
python3 scripts/israel_hours.py open-at \
--rules examples/makolet-jerusalem.json --at "2026-08-01T21:30"
# Which places are bundled?
python3 scripts/israel_hours.py cities
python3 scripts/israel_hours.py cities --search tsfat
Resolving the example across Rosh Hashana 5787:
2026-09-10 thu weekday 07:00 → 23:00
2026-09-11 fri erev_yom_tov 06:00 → 17:10 (Erev Rosh Hashana)
2026-09-12 sat shabbat_yom_tov closed all day (Rosh Hashana 5787)
2026-09-13 sun yom_tov 20:24 → 23:59 (motzei chag, 1h after havdalah 19:24)
2026-09-14 mon weekday 07:00 → 22:00
Locations
56 Israeli places are bundled in data/israel-cities.json
— roughly everywhere above 35,000 people, plus Safed and Zikhron Ya'aqov, which
fall below that cut but matter here because Shabbat-relative hours are the norm
in both. Regenerate with python3 scripts/build_city_table.py --top 55.
Lookup is forgiving. All of these resolve:
safed Tsfat צפת TLV tel aviv Tel Aviv, Israel
kiryat ata Qiryat Ata zichron yaakov Zikhron Ya'aqov
Always address Hebcal by geonameid, never lat/lon
Hebcal carries a per-location candle-lighting custom and silently drops it for bare coordinates. Jerusalem, Friday 2026-07-31:
| Addressed as | Candle lighting | |
|---|---|---|
geonameid=281184 | 18:56 | 40 min before sunset ✅ |
latitude=31.76904&longitude=35.21633 | 19:16 | ~20 min ❌ |
Same coordinates, 20 minutes apart. So --city resolves to a geonameid, and
--latlon is documented as a last resort. Measured across all 56 places:
Jerusalem 40 min, Haifa and Zikhron Ya'aqov 30, everywhere else 20.
Hours rules format
A small JSON document describing what the hours mean, resolved against any date.
Schema in schema/hours-rules.schema.json,
worked example in examples/, authoring guidance in the
hours-rules-authoring skill.
Selectors, most specific first: dates[] → day_types{} → weekly{} → default[].
Endpoints are a clock time ("14:30"), an anchor expression
({"anchor": "havdalah", "offset_min": 60}), or a combination
({"earliest_of": [...]}).
Day types: weekday, erev_shabbat, shabbat, erev_yom_tov, yom_tov,
shabbat_yom_tov, yom_kippur, tisha_bav, chol_hamoed, fast_day.
Friday closings need earliest_of
The most important modelling point. A bare offset before candle lighting does not extrapolate across the year:
"close": { "earliest_of": ["15:00", {"anchor": "candle_lighting", "offset_min": -90}] }
Jerusalem, verified: 2026-01-02 → closes 14:37 (candle lighting 16:07
drives it). 2026-07-31 → closes 15:00 (the clock cap drives it). A shop
that closes at 14:30 on a January Friday is not closing at 17:45 in July.
Setup
export GOOGLE_PLACES_API_KEY=... # or GOOGLE_API_KEY
Hebcal needs no key. requests is the only Python dependency.
Known limits
- 56 places are bundled, covering roughly the top of Israel by population.
Somewhere smaller needs
--geonameid. Prefer that over--latlon, which silently loses the local candle-lighting custom (see below). - West Bank localities are missing. GeoNames files them under
PS, so Beitar Illit, Efrat and Ma'ale Adumim are absent from the Israel dump — while Modi'in Illit and Ariel inconsistently are present. Pass--geonameid. - No Islamic calendar. Ramadan materially shifts hours in Arab-majority areas and is not modelled. The skills flag this rather than guessing.
- Not every Israeli business closes for Shabbat. Much of Tel Aviv, most of Haifa, and Arab- and Christian-owned businesses trade normally on Saturday. A Shabbat rule is applied because a source says so, never by default.
- Derived Friday times are estimates. For a trip that matters, phone ahead.
Why a plugin and not an MCP server
The deterministic part is one CLI (scripts/israel_hours.py) that takes no
context budget until it's used. The hard part — reading a Hebrew hours string,
deciding whether Google's stale Friday beats easy.co.il's, judging confidence —
is model judgment, which is what skills are for. If this is ever needed outside
Claude Code, the CLI is a clean surface to wrap in MCP.
Design notes and verified source behaviour: docs/.
Related
jewish-utilities— general Jewish calendar lookups (zmanim, parsha, daf yomi). This plugin does not depend on it; the Hebcal use here is self-contained and purpose-built.israel-agent-skills— other Israel-specific lookups.
Attribution
Location data derived from GeoNames
(export/dump/IL.zip), licensed CC BY 4.0.
Calendar times from the Hebcal REST API.
License
MIT