Return a curated, ranked list of best local Indonesian women's perfumes from Ruwangi.com — name, brand, IDR price, rating, notes, and time-of-day suitability. Read-only directory lookup using the pre-curated /katalog/parfum-lokal-wanita-terbaik deep-link.
Works with
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionruwangi-parfum-perempuanExecute the skills CLI command in your project's root directory to begin installation:
Fetches ruwangi-parfum-perempuan from ruwangi.com/ruwangi-parfum-laki-laki-ko0z5t and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate ruwangi-parfum-perempuan. Access via /ruwangi-parfum-perempuan in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Automate repetitive workflows and reduce manual effort
Example
Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example
Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example
Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
1
total installs
1
this week
0
upvotes
Run in your terminal
1
installs
1
this week
—
stars
| name | ruwangi-parfum-perempuan |
| title | Ruwangi Best Local Indonesian Women's Perfume |
| description | >- Return a curated, ranked list of best local Indonesian women's perfumes from Ruwangi.com — name, brand, IDR price, rating, notes, and time-of-day suitability. Read-only directory lookup using the pre-curated /katalog/parfum-lokal-wanita-terbaik deep-link. |
| website | ruwangi.com |
| category | shopping |
| tags | - perfume - indonesia - ruwangi - directory - women - local-brand - read-only |
| source | 'browserbase: agent-runtime 2026-05-18' |
| updated | '2026-05-18' |
| recommended_method | browser |
| alternative_methods | - method: url-param rationale: >- Direct deep-link navigation to /katalog/parfum-lokal-wanita-terbaik is itself a URL-driven shortcut — no search/filter steps required. Pagination is path-based (/page/N). The browser is only needed to render and parse the server-side HTML. - method: api rationale: >- No public JSON API was discovered during 2026-05-18 exploration. Page is Next.js App Router server-rendered HTML; only XHR traffic is PostHog analytics (djz.ruwangi.com). Don't waste time hunting for a /api/ endpoint. |
| verified | false |
| proxies | false |
Given a request for "best local Indonesian perfume suitable for women" (or any synonym — parfum lokal wanita terbaik, parfum perempuan, parfum feminin), return a curated, ranked list of women's-leaning Indonesian-brand fragrances from Ruwangi.com, Indonesia's #1 local-perfume directory. For each item, return name, brand, IDR price, rating + review count, fragrance character (notes family), time-of-day suitability (Siang/Malam/Versatile), gender-lean tag (Feminin), and canonical detail URL. Read-only — never adds to cart, never submits the AI quiz, never registers.
Ruwangi exposes a pre-curated, gender-scoped catalog URL at a stable, sitemap-listed path — there's no need to search, apply filters, or call an API. Direct navigation to the deep-link gets you the curated "best women's" list in one HTTP round-trip. Pagination is path-based (/page/N), and the ?page= query string is silently ignored. There is no public JSON API, and sort state is client-side only — so leading with the URL and parsing browse get markdown body is the cheapest, most reliable path. A bare (non-stealth, non-proxy) session works fine — no Akamai, no Cloudflare challenge, no rate-limiting observed.
export BROWSERBASE_API_KEY="$BB_API_KEY"
browse env remote
No --advanced-stealth or --proxies flags required. The site served all requests cleanly with bare-default settings during 2026-05-18 verification. Add --proxies only if you observe a 403 (none seen so far).
browse open "https://ruwangi.com/katalog/parfum-lokal-wanita-terbaik"
browse wait load
browse wait timeout 2000 # let lazy-loaded cards settle
This page is the canonical "Parfum Lokal Wanita Terbaik" catalog — Ruwangi's editorial curation of women's-leaning local perfumes, ordered by default "Relevansi" (their editorial ranking). The page header confirms 🌸Cenderung Feminin · 159 parfum and breadcrumb Katalog / Parfum Lokal Wanita Terbaik.
browse get markdown body > /tmp/wanita.json
The response is a JSON envelope {"markdown": "..."}. Each listing appears as a clean block in this order:
[View {Name}](/parfum/{slug})


{TimeOfDay} # "Siang" | "Malam" | "Versatile"
🌸Feminin # gender-lean emoji + label (also 👔Maskulin, ✨Unisex on cross-listed cards)
{Name} # display name
{brand-slug} # lowercase brand handle (e.g. "mykonos", "aerostreet-parfum")
{rating}({reviewCount}) # e.g. "4.9(6600)" — count may be raw (e.g. 6600) or display-rounded
Rp{price-with-dot-thousands} # IDR, dot-grouped (e.g. "Rp349.000")
Karakter
{character} # fragrance family, e.g. "Oriental", "Fresh Floral", "Warm Floral"
Parse with a regex over the markdown — the [View ...](/parfum/{slug}) anchor is the stable per-card delimiter. A robust extractor (verified on pages 1–2, 20 items each):
const cardRe = /\[View ([^\]]+)\]\(\/parfum\/([^)]+)\)[\s\S]*?(Siang|Malam|Versatile)\s*\n\s*\n(?:👔Maskulin|🌸Feminin|✨Unisex|🚻Unisex)([^\n]*)\n\s*\n([^\n]+)\n\s*\n([^\n]+)\n\s*\n([\d.]+)\(([\d.]+)\)\n\s*\n(Rp[\d.]+)\n\s*\nKarakter\n\s*\n([^\n]+)/g;
// Groups: 1 name, 2 slug, 3 timeOfDay, 5 displayName, 6 brandSlug, 7 rating, 8 reviewCount, 9 priceIdr, 10 character
There are 8 pages (12345...8 shown in the rendered pagination). Pagination uses path-based URLs:
browse open "https://ruwangi.com/katalog/parfum-lokal-wanita-terbaik/page/2"
# ...repeat through page/8
Do not use ?page=2 — the query string is silently ignored and you'll get page 1 again. Page 1 has no /page/1 suffix; subsequent pages are explicit /page/{N}.
browse open "https://ruwangi.com/parfum/{slug}" # e.g. /parfum/sansa
browse wait load
browse wait timeout 1500
browse get markdown body
The detail page exposes:
Skip this step if the user only wants a top-N list — the card data from step 3 is sufficient.
The default Relevansi (relevance) order is Ruwangi's editorial pick of "best". For an explicit "highest-rated" sort, the URL cannot encode it — ?sort=rating is ignored. You have two options:
rating descending (tie-break by reviewCount descending). This avoids the DOM-click-and-rerender dance and is deterministic.For "best for women" specifically, prefer the cards that show 🌸Feminin (some cross-listed ✨Unisex / 👔Maskulin items appear in cross-recommendation rails on the same page; filter on the gender tag when emitting).
See ## Expected Output for the JSON schema.
?page=N is silently ignored — use path-based /page/N. The pagination buttons are <button> elements with no href; they navigate via client-side router to /katalog/{slug}/page/{N}. Direct browse open to the path-based URL works; the query-string variant returns page 1 every time, with no warning.?sort=rating, ?orderBy=rating, etc. all fall through to the default Relevansi. To deliver a rating-sorted result deterministically across reloads, fetch all pages and sort client-side.👔Maskulin and ✨Unisex items (e.g. Fields of Ubud, Untitled Humans Aroma 02). Filter on the per-card gender tag when the user explicitly asked for women's — the count 159 parfum shown in the breadcrumb refers to the curated grid only, not the cross-rails.159 over 8 pages. Last page (/page/8) has 19 cards, not 20./merek-parfum/{brandSlug}) for stable identity.4.9(6600) may represent any value 6550–6649 — the underlying API rounds to the nearest 100 for counts > 1k. Treat as approximate, not exact. For exact counts, see the detail page header (e.g. "6600 Penilaian" — same rounding).self.__next_f.push(...); no __NEXT_DATA__ blob). The only XHR traffic on a category-page load is PostHog analytics POSTs to djz.ruwangi.com/s/ and /i/v0/e/ (return {"status":"Ok"}, irrelevant to data extraction)./parfum/{slug} redirects to Sociolla, Tokopedia, Shopee, or the brand's own store — Ruwangi is a directory, not a marketplace. Treat the link as informational; do not attempt a checkout flow.--advanced-stealth, no --proxies) cleared the homepage, catalog, paginated catalog (/page/2), product detail, and sitemap.xml without challenge. Cloudflare Turnstile script (cf-turnstile-script) is included in the page but not invoked on these read paths. Add --proxies only if a future 403 surfaces.parfum-lokal-pria-terbaik, parfum-lokal-wanita-terbaik, parfum-lokal-unisex-terbaik, parfum-lokal-segar, parfum-lokal-manis, parfum-lokal-bunga, parfum-lokal-rempah, parfum-lokal-hangat, parfum-lokal-herbal, parfum-lokal-natural, parfum-lokal-clean, parfum-siang, parfum-malam, parfum-versatile, parfum-lokal-mewah, parfum-lokal-murah, parfum-aroma-kopi, parfum-aroma-teh. For "perfume for {user-trait}" intents, prefer the matching deep-link over any client-side filter./survey AI quiz is a 5+ question form, not a query API. It exists at https://ruwangi.com/survey and produces personalized recommendations after the user answers preferences, but it is not callable as a one-shot endpoint. For "best for women" specifically, the curated /katalog/parfum-lokal-wanita-terbaik page is the right surface — don't route through /survey."Osmanthus., Peach", "Tuberose, Narcissus, Toffee."). Strip trailing periods when tokenizing into a notes array.{
"source_url": "https://ruwangi.com/katalog/parfum-lokal-wanita-terbaik",
"category": "parfum-lokal-wanita-terbaik",
"category_label": "Parfum Lokal Wanita Terbaik",
"gender_lean": "feminin",
"sort_applied": "Relevansi (editorial)",
"total_in_catalog": 159,
"pages_fetched": 8,
"results": [
{
"rank": 1,
"name": "Sansa",
"slug": "sansa",
"url": "https://ruwangi.com/parfum/sansa",
"brand": "Mykonos",
"brand_slug": "mykonos",
"brand_url": "https://ruwangi.com/merek-parfum/mykonos",
"price_idr": 349000,
"price_display": "Rp349.000",
"rating": 4.9,
"review_count_approx": 6600,
"time_of_day": "Malam",
"gender_tag": "Feminin",
"character": "Oriental",
"image_url": "https://cdn.ruwangi.com/.../products/mykonos/sansa/...Sansa.webp",
"notes": {
"top": ["Black Tea", "Moss", "Osmanthus", "Peach"],
"middle": ["Rose", "Tuberose", "Narcissus", "Toffee"],
"base": ["Vetiver", "Cedarwood", "Orris Root", "Dark Chocolate"]
},
"scent_profile": ["Manis", "Bunga", "Hangat", "Natural"]
},
{
"rank": 2,
"name": "Flower Springtime Rose",
"slug": "flower-springtime-rose",
"url": "https://ruwangi.com/parfum/flower-springtime-rose",
"brand": "Aerostreet Parfum",
"brand_slug": "aerostreet-parfum",
"price_idr": 72900,
"price_display": "Rp72.900",
"rating": 4.9,
"review_count_approx": 1600,
"time_of_day": "Malam",
"gender_tag": "Feminin",
"character": "Fresh Floral"
},
{
"rank": 3,
"name": "MANIKA",
"slug": "manika",
"url": "https://ruwangi.com/parfum/manika",
"brand": "Iki Arum",
"brand_slug": "iki-arum",
"price_idr": 169000,
"price_display": "Rp169.000",
"rating": 4.9,
"review_count_approx": 1700,
"time_of_day": "Malam",
"gender_tag": "Feminin",
"character": "Warm Floral"
}
]
}
notes and scent_profile are only populated when step 5 (detail-page enrichment) runs; omit from the card-only fast path.
Empty / failure shapes:
// Catalog reachable, zero items matched the gender_tag filter (extremely unlikely on this page — sanity guard)
{ "source_url": "...", "results": [], "warning": "no_feminin_cards_after_filter" }
// Page failed to render (Cloudflare challenge or future anti-bot wall)
{ "source_url": "...", "results": [], "error": "page_blocked", "http_status_or_marker": "..." }
Prerequisites
Time Estimate
15-45 minutes depending on use case complexity
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
amazon.com/search-products-5170mf
booking.com/search-hotels-asq6cc
nav.com/get-smb-funding-2s1rpm
aliexpress.com/search-product-p0h8a7
google.com/search-flights-ts4g1f
shopee.com.my/search-products-5epzg0
We added ruwangi-parfum-perempuan from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
ruwangi-parfum-perempuan reduced setup friction for our internal harness; good balance of opinion and flexibility.
Registry listing for ruwangi-parfum-perempuan matched our evaluation — installs cleanly and behaves as described in the markdown.
ruwangi-parfum-perempuan reduced setup friction for our internal harness; good balance of opinion and flexibility.
Registry listing for ruwangi-parfum-perempuan matched our evaluation — installs cleanly and behaves as described in the markdown.
Solid pick for teams standardizing on skills: ruwangi-parfum-perempuan is focused, and the summary matches what you get after install.
ruwangi-parfum-perempuan is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
Solid pick for teams standardizing on skills: ruwangi-parfum-perempuan is focused, and the summary matches what you get after install.
ruwangi-parfum-perempuan fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
Keeps context tight: ruwangi-parfum-perempuan is the kind of skill you can hand to a new teammate without a long onboarding doc.
showing 1-10 of 57