Announcing israeli-prices: a Python client for Israel's retail price-transparency data

24 views
Skip to first unread message

Sasha Bouloudnine

unread,
Aug 30, 2026, 1:05:11 AM (5 days ago) Aug 30
to pywe...@googlegroups.com
Hi everyone,

We just open-sourced israeli-prices, a Python client for the price-transparency data that Israeli law requires retailers to publish.

If you've ever tried to use that data, you know the pain: every chain hosts its files differently—five different portal engines, login flows, UTF-16 files, ZIP archives named .gz.

The library gives you one typed interface for 31 of the 32 chains on the government roster:

    pip install israeli-prices

    import israeli_prices as ilp
    prices = ilp.get_prices("shufersal", store_id="001")


Prices come back as Decimal, Hebrew intact, promotions with their full group structure. It runs nightly in CI against the live portals, so the coverage claims are tested, not aspirational.

We built it for our own pipeline at RxRadar and figured this community would find it useful—CPI research, price-comparison side projects, teaching material.

Feedback, issues and PRs very welcome! Happy to give a talk about the government transparency format at a future meetup if there's interest.

GitHub: https://github.com/rxradar/israeli-prices
PyPI: https://pypi.org/project/israeli-prices/

Best, 
Sasha

Sim Zacks

unread,
Sep 1, 2026, 7:11:38 AM (3 days ago) Sep 1
to pywe...@googlegroups.com
This is great, I'm enjoying playing with it, thank you.
Two questions about features that I don't see . 
1) Do you have any method of categorizing the items?
For example, if you want to look up meat - the only way I can figure it out is by using the is_weighted field  and have a list of meat words that it will check against the name.

2) For items that have a different item_code and name per store (such as fruits/vegetables) is there any way of comparing across?

Sim

--
You received this message because you are subscribed to the Google Groups "PyWeb-IL" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pyweb-il+u...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/pyweb-il/CAKnGb86LMrhaFBkiREYoxDBZchhR9RjdPbQRj2mppU1kfQzD_w%40mail.gmail.com.

Sasha Bouloudnine

unread,
Sep 2, 2026, 1:14:45 AM (yesterday) Sep 2
to pywe...@googlegroups.com
Thanks Sim! — and your questions actually pushed a release: I shipped GTIN helpers for the cross-chain case in 0.2.0 (pip install -U israeli-prices).


On (2) cross-chain comparison — it splits in two:

- Barcoded products carry the same GTIN everywhere, so it's the join key. New in 0.2.0: `item.gtin` (canonical GTIN-14, or None) and `group_by_gtin()` to line the same SKU up across chains:

    sp = ilp.get_prices("super-pharm", store_id="142")
    sh = ilp.get_prices("shufersal", store_id="001")
    for gtin, by_chain in ilp.group_by_gtin(
        {"super-pharm": sp, "shufersal": sh}, min_sources=2
    ).items():
        print(gtin, {c: it.price for c, it in by_chain.items()})


- Your fruits/veg example is the hard half, and honestly the feed can't solve it: loose/weighted items use a per-chain internal code and a free-text Hebrew name, with no shared identifier. `gtin` is `None` for them by design. Comparing those across chains needs a normalization / fuzzy-match layer on top — out of scope for a 1:1 client, but it's the genuinely interesting problem.

On (1) categorization — still no category field in the government schema, so `is_weighted` + keywords really is the pragmatic path. The one upgrade: for barcoded items `item.gtin` is now a clean hook into an external product database (Open Food Facts, GS1) if you want proper categories.

Open an issue if a categorization or produce-normalization helper would be useful — thanks again for the nudge.

Best,
Sasha


Sim Zacks

unread,
Sep 2, 2026, 8:17:59 AM (yesterday) Sep 2
to pywe...@googlegroups.com
Great new feature. Thanks.
I've actually been playing with the files on and off for a few years now. The categorization, fruit and meat are the reason I never actually finished it.
I'll continue playing and see if I can figure out how to get what I want out of it.

Sim

Reply all
Reply to author
Forward
0 new messages