Israel Phonebook Manager

August 3, 2026 · View on GitHub

Save Israeli offices to Google Contacts without losing the parts that make them Israeli.

A contact record has one field for hours. An Israeli government branch has at least two timetables that do not coincide — קבלת קהל at the counter and the מוקד on the phone — plus, often, separate summer and winter versions of both, a Friday close pegged to candle lighting rather than a clock, a different rule for chol hamoed, and a main number that will not connect from a foreign SIM.

None of that fits anywhere, so it gets flattened, and the entry then tells you the office is open at a time you cannot get through the door.

What it does

Give it a URL, a pasted page, a photo of the sign on the door, or notes from a phone call. It reads the source — in Hebrew — works out which timetable is which, classifies the numbers, and writes a Google Contacts entry with the specifics in a fixed set of custom fields plus a plain-text mirror in Notes.

/save-contact https://…            save an office from a page
/save-contact                      it will ask what to save
/audit-phonebook ביטוח לאומי        sweep what is already saved

The problems it exists for

Two timetables, one field. Counter hours and call-centre hours are kept apart, and each carries the source's own wording so a wrong reading can be caught later without refetching the page.

Hours that are not clock times. "Closes two hours before candle lighting" is stored as written, not resolved. Candle lighting moves by an hour and forty minutes across the year, so any clock time you resolve it to is wrong for most of the year it sits in the contact. For a concrete time on a concrete date, hand the entry to Claude-Israel-Opening-Hours-Plugin, which resolves exactly this — the two plugins are meant to sit side by side.

Numbers that silently do not connect. *3450 has no international form. 1-800 and 1-700 do not connect from most countries — which bites hardest on someone who still has a foreign SIM in the handset. 1-800 is free and 1-700 is not, and agency sites list them interchangeably. Every number is classified before it is saved, and a Dial Notes field records what the numbers themselves do not say.

The things nobody writes down. Which languages you can actually be served in — and whether that is the counter or the phone line. What documents to bring. Which entrance, which floor, and that you need a queue ticket from the machine in the lobby before joining any line.

Skills

SkillFor
save-israeli-contactMain entry point. Source → entry → Google Contacts.
israeli-contact-fieldsWhere a given detail belongs, and how to update without destroying the collection it lives in.
israeli-phone-numbersClassify a number before saving it. What connects from where.
israeli-org-sourcesWhich portal has the details, and which ones can be fetched at all.
audit-israeli-phonebookSweep what is already saved for broken, stale and duplicated entries.
olim-essential-contactsA starter set for someone who has just arrived.

Requirements

A connected google-contacts MCP server with create/update/search and set_custom_field. Python 3.10+ for the scripts — stdlib only, nothing to install.

If two Google accounts are connected, the plugin asks which phonebook a contact belongs in before writing. Crossing them is not a clean failure.

Try it without touching your contacts

python3 scripts/contact_build.py examples/government-branch.json
python3 scripts/contact_build.py examples/government-branch.json --notes-only
python3 scripts/il_phone.py classify '*3450' '1-800-22-1000' '02-629-4666'
python3 scripts/test_il_phone.py && python3 scripts/test_contact_build.py

The examples are synthetic — invented details showing the shape of an entry. Real captures go in contacts/, which is gitignored.

How it is put together

schema/israeli-org-contact.schema.json   what a captured entry looks like
reference/custom-field-keys.md           the closed vocabulary of contact fields
reference/numbering-plan.md              which numbers connect from where
reference/hebrew-vocabulary.md           reading an Israeli office page
scripts/il_phone.py                      classify and format numbers
scripts/contact_build.py                 entry → Google Contacts arguments

Two design decisions worth knowing about:

The custom field keys are a closed set of sixteen. Google stores keys verbatim and matches them exactly, so a key that drifts by one character stops matching the rest of the phonebook. reference/custom-field-keys.md is the authority; adding a key means adding it there first.

The structured fields and the Notes block are generated together, from one source object, in one pass — so they cannot drift apart. The duplication is deliberate: Notes renders in every client that shows a contact at all, while custom fields are rendered inconsistently, and the contact is most needed standing outside the office on whatever device is to hand.

Scope

Israel-specific by design. The peculiarities it handles — a Sunday-to-Thursday week, hours pegged to Shabbat, a numbering plan with several classes that cannot be expressed in E.164, and a bureaucracy divided along lines that are opaque until you have already been through it — do not generalise, and a generic contact manager has no reason to carry them.

MIT licensed.