From israel-shopping
Use when the user wants to see only the reviews left by Israeli buyers (`reviews from IL`) on an AliExpress product page — filtering out the global review pool and surfacing what people who actually shipped to Israel said about the item, including the variant/SKU they bought, star rating, photos, review text, and date. Drives the AliExpress product page (`/item/<id>.html`) reviews section via Playwright, clicks the IL country-flag chip in the review-filter strip (validated version-agnostic selector — `[class*="country-flag-"].IL`), expands "View more" if present, and extracts the per-review fields. Trigger phrases — "show israeli reviews", "what do israelis say about X", "il reviews aliexpress", "filter aliexpress reviews to israel", "reviews from israel for this listing".
npx claudepluginhub danielrosehill/claude-code-plugins --plugin israel-shoppingThis skill uses the workspace's default tool permissions.
Filter the reviews on an AliExpress product page down to those left by Israeli buyers and return them in a structured form.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Filter the reviews on an AliExpress product page down to those left by Israeli buyers and return them in a structured form.
AliExpress aggregates reviews globally. For an Israel-based buyer, only the IL-tagged reviews are signal — they confirm:
url (required) — full AliExpress product URL (https://he.aliexpress.com/item/<id>.html or .aliexpress.com/item/<id>.html).max_reviews (optional, default: all) — cap on number of IL reviews to extract.translate_hebrew (optional, default false) — if a review body is in Hebrew, also include an English gloss.Site must be in IL/Hebrew/ILS (see search-aliexpress skill for the cookie handshake — aep_usuc_f.c_tp=ILS, b_locale=iw_IL). The IL chip appears regardless of locale, but timestamps render per b_locale and need to be parsed accordingly.
The review-filter strip lives below the reviews header. Each chip is a <div> whose class starts with filter--filterItem--. The Israel chip carries a child <span> whose class list contains some country-flag-* versioned class plus the bare ISO-2 IL. As of capture date the versioned class is country-flag-y2023, but the -y2023 suffix telegraphs that AliExpress versions this sprite — anchor on the prefix, not the year. Validated in research/ui-selectors/product-page-review-filters.md.
Robust selector — version-agnostic, won't break when AliExpress rolls country-flag-y2024 / country-flag-v2 / etc.:
const ilChip = document.querySelector('[class*="country-flag-"].IL')
?.closest('[class*="filter--filterItem--"]');
Do not anchor on the literal country-flag-y2023 — it will break on the next sprite roll. The [class*="country-flag-"] substring + the IL ISO class together are the stable pair: any country-flag-* class with the IL co-class.
Reviews section exists: [class*="title--wrap--"] is present. If not, the listing has no reviews at all — report and stop.
IL chip exists: [class*="country-flag-"].IL is in the DOM. If absent, no reviews from Israel exist for this product — report 0 IL reviews and stop. Do not invent any.
IL chip is not invalid: the wrapper does not carry [class*="filter--invalid--"]. (An invalid chip would render with (0) and be non-clickable — but in practice if the count is 0 the chip won't appear at all on most builds.)
Read the IL count from the chip text, e.g. (1):
const m = ilChip?.textContent.match(/\((\d+)\)/);
const ilCount = m ? parseInt(m[1], 10) : 0;
Click the chip wrapper (not the inner flag span):
ilChip.click();
Then verify the chip flipped to active:
ilChip.matches('[class*="filter--active--"]'); // → true
Wait for the review list to re-render (network idle, or wait for the list container to mutate). The reviews header copy ("7 ratings", etc.) does not change after filtering — only the list below filters. Don't gate on the header.
If a View more button is present at the bottom of the review list, click it repeatedly until either:
max_reviews IL reviews have been collected.Selector (locale-dependent text):
const btn = [...document.querySelectorAll('[class*="v3--btn--"]')]
.find(b => /view more|טען עוד|הצג עוד/i.test(b.textContent));
Each review is a [class*="list--itemBox--"]. Extract:
| Field | Selector (relative to the item box) |
|---|---|
| stars (1–5) | [class*="stars--box--"] .comet-icon-starreviewfilled → count |
| variant / SKU | [class*="list--itemSku--"] (e.g. Color:black, Size:M) |
| review body | [class*="list--itemReview--"] — may be empty (star-only) |
| customer photos | [class*="list--itemThumbnails--"] img → src array |
| product thumb | [class*="list--itemPhoto--"] img → src |
| username + date | [class*="list--itemInfo--"] span — split on ` |
| helpful count | [class*="list--itemHelpText--"] → \((\d+)\) |
AliExpress Shopper (or its locale equivalent) for everyone. Do not present this as the reviewer's identity.textContent.trim().length === 0 and tag as star-only.b_locale=iw_IL, dates render in Hebrew (e.g. 11 בפבר׳ 2026). Parse defensively; if parsing fails, return the raw string.<facet>:<value>[, <facet>:<value>]… — preserve as-is, don't try to normalise.Product: <title>
URL: <url>
IL reviews: <N> (chip count: <chip_count>)
Average rating (all locales): <X.X> ← from header, not IL-filtered
For each IL review:
─────────────────────────────────────
[★★★★★] variant: <Color:black, Size:M>
date: <YYYY-MM-DD or raw> helpful: <N>
photos: <count> thumbs: [<urls>]
review:
<body or "(star-only — no text)">
─────────────────────────────────────
If translate_hebrew=true and a review body is Hebrew, append an English gloss block after the original.
0 IL reviews, stop.filter--active--* doesn't appear) → wait once more, then report inability to apply filter and bail.translate_hebrew=true is set./item/<id>.html.[class*="filter--active--"].null if absent).