Fashionphile Handbag Listings Scraper avatar

Fashionphile Handbag Listings Scraper

Pricing

Pay per event

Go to Apify Store
Fashionphile Handbag Listings Scraper

Fashionphile Handbag Listings Scraper

Scrape live Fashionphile.com luxury handbag inventory by brand or keyword search — price, condition, SKU, images, and retail savings per row, sourced directly from Fashionphile's own Algolia search backend. No per-item HTTP calls, no HTML parsing, fully-resolved records in one pass.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Categories

Share


🎯 What this scrapes

Fashionphile doesn't publish a bulk export of its live handbag inventory, and its own /shop search page ships a decoy JSON block with null price and SKU fields. This Actor queries Fashionphile's own Algolia search index directly — the same backend that powers its on-site search — so luxury handbag resellers, authenticators, and price-arbitrage operators get fully-resolved listing data (price, condition, SKU, images, retail savings) in one pass, with zero per-item HTTP calls and no HTML parsing.

🔥 What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
  • 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

💡 Use cases

  • Price-arbitrage sourcing — scan brand/keyword queries for underpriced authenticated handbags before casual buyers find them via Fashionphile's own storefront search.
  • Authentication and resale comps — pull condition, SKU, and retail-savings data to benchmark a bag's resale value against Fashionphile's live listings.
  • Inventory monitoring — track how many listings a brand or model holds in Fashionphile's catalog and at what price band, run over run.
  • Luxury market research — build a keyword-level snapshot of live handbag supply, condition mix, and pricing across brands.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
searchTermsarrayyes['chanel', 'hermes birkin']Brand or keyword queries to run against Fashionphile's Algolia search index, e.g. "chanel", "hermes birkin". Blank…
maxItemsPerSearchintegerno60Cap on rows collected per search term. Pagination stops early once this is reached.
proxyConfigurationobjectno{'useApifyProxy': True}Apify Proxy configuration. Datacenter default — Fashionphile's Algolia backend showed no block signal in testing;…

Example input

{
"searchTerms": [
"chanel",
"hermes birkin"
],
"maxItemsPerSearch": 5,
"proxyConfiguration": {
"useApifyProxy": true
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
object_idstringStable Algolia identifier (objectID), used as dedup key.
skustringFashionphile's own SKU.
titlestringListing title.
urlstringCanonical fashionphile.com/products/ URL, constructed with no extra fetch.
pricenumberCurrent asking price, whole USD.
compare_at_price['number', 'null']Retail price before markdown, whole USD.
retail_savings_percent['number', 'null']Percent saved vs. retail.
condition['string', 'null']Fashionphile's own condition label, e.g. 'Excellent'.
imagesarrayCDN image URLs — may be empty, never null.
categoriesarrayCategory/collection tags — may be empty, never null.
description['string', 'null']Listing description (Shopify-sanitized HTML passthrough).
inventory_quantityintegerUnits in stock, default 0.
published_at['string', 'null']ISO-8601 publish timestamp, pass-through.
search_termstringThe input search term that produced this row.
scraped_atstringISO-8601 UTC timestamp when this row was recorded.

Example output

{
"object_id": "shopify_products_7841234567890",
"sku": "FP-CHN-00042",
"title": "Chanel Classic Medium Double Flap Black Caviar",
"url": "https://www.fashionphile.com/products/chanel-classic-medium-double-flap-black-caviar-00042",
"price": 5095.0,
"compare_at_price": 6200.0,
"retail_savings_percent": 17.8,
"condition": "Excellent",
"images": [
"https://cdn.shopify.com/s/files/1/fashionphile/00042-front.jpg"
],
"categories": [
"Handbags",
"Chanel",
"Flap Bags"
],
"description": "Chanel Classic Medium Double Flap in black caviar leather with gold hardware.",
"inventory_quantity": 1,
"published_at": "2026-07-30T14:22:00Z",
"search_term": "chanel",
"scraped_at": "2026-08-24T12:00:00.000Z"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.05One-off warm-up charge per run
result-row$0.003Per unique dataset item

Example: 1 000 results at the rates above ≈ $3.05. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

  • Live inventory only — no sold/historical pricing or comps mode.
  • No strict "bags only" filtering — a broad brand query may return non-bag accessories from the wider catalog; scope via search_terms.
  • USD pricing only — non-US storefronts are out of scope.
  • No cross-search-term deduplication — overlapping queries can return the same listing twice, each tagged with its own search term.

❓ FAQ

Do I need a Fashionphile account or API key?

No. This Actor queries Fashionphile's own public, search-only Algolia index — the same backend that powers its on-site search — no login, no API key.

Does this scrape the /shop HTML page instead?

No — the /shop page's embedded JSON block carries null price and SKU placeholders. This Actor queries Algolia directly for fully-resolved data.

Does this fetch each listing's detail page?

No — the Algolia hit already carries every field this Actor emits (price, condition, SKU, images), so there's no extra per-item HTTP call.

What happens if a search term matches nothing?

That term finishes as a clean, zero-row success — a genuine no-match is not treated as a failure. The run only fails if every search term could not be reached at all.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.