# Vivrelle Scraper - Luxury Bags, Jewelry, Prices & Availability (`abotapi/vivrelle-com-scraper`) Actor

Scrape Vivrelle luxury handbag and jewelry rentals by keyword, filter or URL. Extract product names, brands, membership tiers, retail values, monthly rental prices by tier, availability and full image galleries.

- **URL**: https://apify.com/abotapi/vivrelle-com-scraper.md
- **Developed by:** [Abot API](https://apify.com/abotapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 rental item records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Vivrelle Scraper: Luxury Bag and Jewelry Rental Closet

Scrape the Vivrelle rental closet: the members-only rotation of Chanel, Hermes, Louis Vuitton, Dior and fine jewelry pieces available to borrow each month. This actor returns the catalog as structured records: every item with its brand, membership tier, estimated retail value, monthly borrow price per tier, availability, photo gallery and full item detail. Search by keyword, narrow with the closet's own filters, or paste item and collection links. Results land in a clean dataset you can export to CSV, Excel, JSON or pipe straight into your apps.

### Why This Scraper?

- **Three ways in.** Keyword search over the closet, the closet's own filters (collection, item type, brand, color, occasion, material, membership tier, new arrivals), or pasted item and collection links.
- **Deep records.** Brand, tier, retail value, the monthly price for every membership tier, availability state, sizes, condition notes and the complete photo gallery on every enriched row.
- **Tracks the rotation.** Incremental mode on a schedule returns only what changed: items borrowed, returned, repriced or rotated out of the closet.
- **Walks the whole closet.** Forward pagination follows each search or collection to its natural end, past 90-item page after page, with resume support for interrupted runs.
- **Structured output.** One flat record per closet item with identity fields (SKU, slug, product id), stable record IDs for dedup, and export-ready views.
- **MCP connectors.** Optionally pipe each record into Notion, Linear, Airtable or any MCP-connected app.

### Use Cases

- **Resale and valuation research:** track estimated retail values and membership pricing across thousands of authenticated designer pieces.
- **Inventory and rotation monitoring:** watch which items are borrowed or returned, and which new arrivals drop each week.
- **Market and trend analysis:** analyze brand mix, item types, colors and materials across the luxury rental market.
- **Wishlist automation:** get only the items that appeared, repriced or came back in stock since your last run.
- **Content and commerce pipelines:** feed structured product data with full galleries into sheets, Notion or your own tools.

### Data You Get

> Sample shape: values are illustrative placeholders, not from a live record.

| Field | Example |
| --- | --- |
| `recordId` | `vivrelle:PHCC104204` |
| `url` | `https://www.vivrelle.com/products/sample-item-slug` |
| `title` | `Sample Quilted Vanity Case with Chain` |
| `brand` | `Chanel` |
| `tier` | `Couture` |
| `availability` | `available` |
| `monthlyPrice` | `239` |
| `retailValue` | `5500` |
| `retailValueText` | `$$5,500.00` |
| `tierPrices` | `{"Premier": 49, "Classique": 139, "Couture": 239}` |
| `collectionType` | `Handbags` |
| `itemType` | `Top Handle` |
| `category` | `handbag` |
| `categoryTrail` | `["Handbags", "Top Handle", "Chanel"]` |
| `colors` | `["Red"]` |
| `description` | `Color: Red. Features: a removable chain and leather strap...` |
| `sizeAndMeasurements` | `7.5" W x 5" H x 2" D. Strap Drop: 22.5"` |
| `conditionNotes` | `Condition of each item will vary.` |
| `imageUrl` | `https://img.example.com/SKU-1-MAIN.jpg` |
| `imageUrls` | `["https://img.example.com/SKU-1-MAIN.jpg", "..."]` |
| `imageCount` | `5` |
| `sku` | `PHCC104204` |
| `changeType` | `NEW` |
| `scrapedAt` | `2026-01-01T00:00:00Z` |

Curated edit pages and member-tier context are folded into the same record shape; jewelry records carry their own trail (`Fine Jewelry`, `Necklaces`, brand) and the same tier pricing.

### How to Use

1. Pick a mode: **Search and filters** to browse the closet, or **Paste Vivrelle URLs** for exact item and collection links.
2. In search mode, add one or more search terms and narrow with the filters: collection, item types, brands, colors, occasions, materials, membership tiers, or new arrivals only. The filters also apply to URL-mode walks.
3. Set **Max items** for the run cap (20 by default; 0 runs until the walk ends naturally) and keep **Fetch item details** on for the deep fields.
4. Run the actor and export the dataset, or select an MCP connector to send records into your apps.

**Search by keyword:**

```json
{"mode": "search", "searchTerms": ["chanel flap"], "maxItems": 20, "fetchDetails": true}
```

**Filter the closet:**

```json
{"mode": "search", "collection": "Handbags", "categories": ["Top Handle"], "brands": ["Chanel"], "maxItems": 40}
```

**Scrape pasted links:**

```json
{"mode": "url", "urls": ["https://www.vivrelle.com/products/sample-item-slug", "https://www.vivrelle.com/collection?collection=Handbags"], "maxItems": 30}
```

**Watch for changes on a schedule:**

```json
{"mode": "search", "collection": "Fine Jewelry", "incrementalMode": true, "stateKey": "jewelry-watch", "maxItems": 0}
```

#### Run it from your code

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("abotapi/vivrelle-com-scraper").call(run_input={
    "mode": "search",
    "searchTerms": ["chanel flap"],
    "maxItems": 20,
    "fetchDetails": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["brand"], item["monthlyPrice"])
```

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('abotapi/vivrelle-com-scraper').call({
    mode: 'search',
    searchTerms: ['chanel flap'],
    maxItems: 20,
    fetchDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((item) => [item.title, item.monthlyPrice]));
```

You can also trigger the actor from Make, Zapier, n8n, Google Sheets or a webhook on the actor's Integrations tab.

#### Tips

- **The cap shapes the run.** The closet serves about 90 items per page; `Max items` stops the walk mid-page when reached, so a 20-item run reads one page and about 20 item pages. Set `0` to walk the whole scope.
- **Availability is the signal.** On a rental closet, `availability` flips between `available` and `borrowed` as pieces rotate; incremental mode reports those flips as `UPDATED`.
- **Resume a big crawl.** If a run is interrupted, paste its run ID into **Resume from a previous run** and it continues without re-collecting or re-charging what the first run already returned.
- **Scheduled monitoring.** Use **Incremental mode** with a **State key** for recurring runs of the same search: the first run returns everything as `NEW`, later runs return only what changed.

### Send results into your apps (MCP connectors)

This actor can pipe its results into the apps you already use through Apify's MCP connectors. Authorize a connector once under Apify → Settings → API & Integrations, then select it in the **mcpConnectors** input. The **Notion** connector creates one page per record under the page you set in **notionParentPageUrl**; other connectors receive a condensed summary per record (title, brand, tier, prices, availability and link). Each connector gets a condensed summary, not the full record; the complete record always stays in the dataset. `maxNotifyListings` caps how many records are written per run. Leave the section empty to skip the export entirely; it never changes the dataset output.

### Input Parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | select | `search` | Search the closet by keyword and filters, or process pasted item and collection links. |
| `searchTerms` | stringList | `["chanel flap"]` | Keyword searches to run, one walk each. Search mode only. |
| `collection` | select | - | Narrow to Handbags, Designer Jewelry or Fine Jewelry. Both modes. |
| `categories` | stringList | - | Item types such as Shoulder, Crossbody, Top Handle, Tote, Necklaces, Earrings. Both modes. |
| `brands` | stringList | - | Only keep items by these brands (display names, e.g. Van Cleef & Arpels). Both modes. |
| `colors` | stringList | - | Only keep items in these colors. Both modes. |
| `occasions` | stringList | - | Only keep items tagged for these occasions or edits. Both modes. |
| `materials` | stringList | - | Only keep items in these materials. Both modes. |
| `tiers` | stringList | - | Only keep items borrowable with these membership tiers. Both modes. |
| `newArrivals` | checkbox | `false` | Only keep the closet's new arrivals. Both modes. |
| `minRetailValue` | number | - | Only keep rows with at least this estimated retail value (USD). |
| `maxRetailValue` | number | - | Only keep rows with at most this estimated retail value (USD). |
| `urls` | stringList | - | Item or collection links; every link shape the site uses is accepted. URL mode only. |
| `fetchDetails` | checkbox | `true` | Fetch each item's page for description, sizes, condition, retail value, per-tier pricing and the full gallery. Charged once per record. |
| `maxItems` | integer | `20` | The single run cap across all searches and links. 0 means unlimited. |
| `maxPages` | integer | `0` | Safety bound on pages walked per source. 0 means no page limit. |
| `proxy` | proxy | Apify default | Leave the default; residential is recommended for the most reliable large runs. |
| `resumeFromRunId` | textfield | - | Continue one interrupted run without re-collecting what it already returned. |
| `incrementalMode` | checkbox | `false` | For scheduled runs: return only NEW, UPDATED and REAPPEARED records after the first run. |
| `stateKey` | textfield | - | Name a monitoring campaign to keep its state stable or share it deliberately. |
| `emitUnchanged` | checkbox | `false` | Also return unchanged records, marked UNCHANGED (returns and bills extra rows). |
| `emitExpired` | checkbox | `false` | Also return records no longer found, marked EXPIRED (returns and bills extra rows). |
| `ignoreFieldsForChanges` | stringList | - | Extra field names to exclude from change detection, on top of the built-in list. |
| `mcpConnectors` | mcpConnector | - | Send results into Notion, Linear, Airtable or Apify via MCP. Optional. |
| `notionParentPageUrl` | textfield | - | Notion page under which record pages are created. Notion connector only. |
| `maxNotifyListings` | integer | `50` | Cap on records written to each connector per run. |

### Output Example

> Sample shape: values are illustrative placeholders, not from a live record.

```json
{
  "recordId": "vivrelle:PHCC104204",
  "url": "https://www.vivrelle.com/products/sample-item-slug",
  "slug": "sample-item-slug",
  "sku": "PHCC104204",
  "itemId": "00000000-0000-0000-0000-000000000000",
  "productId": "PHCC104204",
  "title": "Sample Quilted Vanity Case with Chain",
  "brand": "Chanel",
  "category": "handbag",
  "collectionType": "Handbags",
  "itemType": "Top Handle",
  "categoryTrail": ["Handbags", "Top Handle", "Chanel"],
  "tier": "Couture",
  "retailValue": 5500,
  "retailValueText": "$$5,500.00",
  "monthlyPrice": 239,
  "monthlyPriceCurrency": "USD",
  "tierPrices": {"Premier": 49, "Classique": 139, "Couture": 239, "Classique+": 249, "Couture+": 339},
  "borrowed": false,
  "availability": "available",
  "colors": ["Red"],
  "description": "Color: Red. Features: a removable chain and leather strap, leather top handle, zip around closure.",
  "sizeAndMeasurements": "7.5\" W x 5\" H x 2\" D. Strap Drop: 22.5\"",
  "conditionNotes": "Condition of each item will vary.",
  "imageUrl": "https://img.example.com/SKU-1-MAIN.jpg",
  "hoverImageUrl": "https://img.example.com/SKU-2-HOVER.jpg",
  "imageUrls": ["https://img.example.com/SKU-1-MAIN.jpg", "https://img.example.com/SKU-3-STANDARD.jpg"],
  "imageCount": 5,
  "isPrivee": false,
  "raw": {"brand": "Chanel", "tier": "Couture"},
  "scrapedAt": "2026-01-01T00:00:00Z"
}
```

### Plan Requirement

This actor charges per event: a start fee when the run begins, a per-record fee for each closet record returned, and a detail surcharge for each record whose item page was read. Apify plans and their connection options are described on the Apify pricing page.

### FAQ

#### How much does it cost?

The actor is pay per event: you pay a start fee per run, a per-record fee for every closet record returned, and a per-record detail surcharge when Fetch item details is on (it is on by default). Exact prices are on the actor's Pricing tab. `Max items` is the cost lever: a run's record count is bounded by it.

#### Is it legal to scrape Vivrelle?

The actor reads publicly available catalog pages: the item grid, filter facets and item detail pages that any visitor sees without an account. It does not access member accounts, wishlists or checkout. You are responsible for using the data in line with the site's terms of use, privacy law such as GDPR or CCPA, and applicable regulations; personal data of identifiable individuals requires a lawful basis.

#### Can I get only new or changed items on a schedule?

Yes. Turn on **Incremental mode** and schedule the actor. The first run returns everything matching as NEW; later runs return only NEW, UPDATED and REAPPEARED records. Availability flips, retail value moves and monthly price moves all count as changes. Use **State key** to keep a monitoring campaign stable, and **Emit unchanged** or **Emit expired** only if you also want those rows (they return and bill extra rows).

#### Why did a run return fewer results than the site shows?

The run stops at **Max items**, which defaults to 20. The closet serves about 90 items per page, so a capped run reads only the first page. Raise Max items, set it to 0, or narrow the filters to get a fuller slice. Search feeds also rotate as the closet turns over, so two runs hours apart can legitimately differ.

#### Does it scrape product reviews?

No. Vivrelle publishes no product ratings, review widgets, or member testimonials on its public pages (verified October 2026: no review markup, widgets, or story routes on product or collection pages), so there is nothing to collect, and nothing extra to bill.

#### Why did my run fail instead of returning an empty dataset?

A run that could not read any pages at all fails loudly with a connection message instead of returning an empty dataset, because an empty result and a refused connection are different things. Retry a few minutes later, or try the Residential proxy option; if you supply your own proxy URLs, the actor uses exactly those.

#### Can I use it with AI agents or MCP?

Yes. The actor ships an MCP connector input: authorize a connector under Apify → Settings → API & Integrations, select it in **mcpConnectors**, and each run writes its records to Notion or your other MCP-connected apps. The dataset itself is also available to any AI agent through the Apify API.

### 🔗 More scrapers you might like

Pair this actor with these related scrapers from the same team:

<table>
<tr><td>🏷️ <a href="https://apify.com/abotapi/poshmark-scraper"><b>Poshmark Scraper</b></a><br>Scrape Poshmark fashion-resale listings: keyword search, brand and category browse, sold...</td><td>👗 <a href="https://apify.com/abotapi/24s-com-scraper"><b>24S Scraper</b></a><br>Scrape 24S luxury fashion by category, filters, or URL. Extract brand, name, price...</td></tr>
<tr><td>🛒 <a href="https://apify.com/abotapi/therealreal-scraper"><b>The RealReal Scraper</b></a><br>Scrape luxury consignment listings from therealreal.com. Browse by designer, category or...</td><td>🧩 <a href="https://apify.com/abotapi/ssense-product-scraper"><b>SSENSE Scraper</b></a><br>Scrape SSENSE by keyword, category, designer or URL. Every row carries the selling price...</td></tr>
<tr><td>🛒 <a href="https://apify.com/abotapi/costco-au-scraper"><b>Costco AU Scraper</b></a><br>Scrape Costco.com.au products by keyword or product, search and category URLs. Extract...</td><td>🏷️ <a href="https://apify.com/abotapi/chrono24-scraper"><b>Chrono24 Scraper</b></a><br>Scrape Chrono24 luxury watch listings by keyword, filters or URL. Extract 50+ fields...</td></tr>
</table>

👉 [Browse all abotapi scrapers](https://apify.com/abotapi)

### 💬 Support

- 🐞 **Found a bug or a missing field?** Open a ticket on the [Issues tab](https://apify.com/abotapi/vivrelle-com-scraper/issues/open). We usually reply within hours.
- 🛠️ **Need another site, extra fields or a private build?** Email <contact@abotapi.com>.
- ⭐ **Enjoying it?** A quick review on the actor page helps other users find it.

# Actor input Schema

## `mode` (type: `string`):

How to start the scrape. 'search' runs closet searches: keyword searches plus the filters below. 'url' processes the Vivrelle links you paste: an item URL returns that single item in full, and a collection or curated-edit URL is paged like a browse, the link's own filters deciding the scope. The filters below also apply to the rows URL mode reads.

## `searchTerms` (type: `array`):

One or more things to search the closet for, for example 'chanel flap', 'gold hoop earrings', 'weekender'. Each term is scraped independently. Search mode only: in URL mode the scope is read out of each pasted link instead.

## `collection` (type: `string`):

Narrow to one or more closet collections. The closet serves three: Handbags, Designer Jewelry and Fine Jewelry. Applies in BOTH search mode and URL mode.

## `categories` (type: `array`):

Item types inside the collection, for example Shoulder, Crossbody, Top Handle, Tote, Mini, Clutch, Satchel, Wallet on a Chain for Handbags; Necklaces, Bracelets, Earrings, Rings, Watches for the jewelry collections. Applies in BOTH search mode and URL mode.

## `brands` (type: `array`):

Only keep items by these brands, for example Chanel, Hermes, Louis Vuitton, Christian Dior, Saint Laurent, Gucci, Van Cleef & Arpels, Cartier. Use the brand's display name. Applies in BOTH search mode and URL mode.

## `colors` (type: `array`):

Only keep items in these colors, for example Black, Gold, Pink, Red, Neutral. Applies in BOTH search mode and URL mode.

## `occasions` (type: `array`):

Only keep items tagged for these occasions or edits, for example Everyday Essentials, Special Occasion, Beach Bound, Quiet Luxury, Curated Vintage. Applies in BOTH search mode and URL mode.

## `materials` (type: `array`):

Only keep items in these materials, for example Leather, Canvas, Tweed, Caviar Leather, Raffia, Gold (Yellow, Rose, White). Applies in BOTH search mode and URL mode.

## `tiers` (type: `array`):

Only keep items borrowable with these membership tiers. Premier is the entry tier, Classique and Couture are the core bag and jewelry tiers, and the plus tiers add the top-shelf closet. Applies in BOTH search mode and URL mode.

## `newArrivals` (type: `boolean`):

Only keep the closet's new arrivals. Applies in BOTH search mode and URL mode.

## `minRetailValue` (type: `number`):

Only keep rows whose estimated retail value is at least this amount, in USD. Applied to the rows this run reads (the value comes from the item page, so keep Fetch item details on for this filter to be meaningful).

## `maxRetailValue` (type: `number`):

Only keep rows whose estimated retail value is at most this amount, in USD. Applied to the rows this run reads.

## `urls` (type: `array`):

Paste item URLs or collection URLs; every link shape the site uses is accepted. Item links look like vivrelle.com/products/caviar-slim-vanity-case-with-chain-32 and return that single item in full. Collection links look like vivrelle.com/collection?collection=Handbags or vivrelle.com/collection?brand=Chanel\&page=2 (add page=N to start that walk further in). Curated edit links like vivrelle.com/collection/morganstewart are paged like a browse. The filters above also narrow these walks.

## `fetchDetails` (type: `boolean`):

Fetch each item's own page for the description, sizes and measurements, condition notes, estimated retail value, monthly price per membership tier and the full photo gallery. Slower, and charged once per record. Leave off for a fast crawl: title, brand, tier, availability and photos are on the rows either way.

## `maxItems` (type: `integer`):

The single cap on this run: stop after collecting this many records across all search terms and URLs. Set 0 for unlimited.

## `maxPages` (type: `integer`):

Safety bound on how many result pages to walk per search term or URL, about 90 items per page. Leave empty (0) for no page limit: the run then stops at Max items, not here. Does not impose a separate cap below Max items.

## `proxy` (type: `object`):

Leave the default for the cheapest run. The closet is served over ordinary shared connections; Residential is recommended for the most reliable results on large or frequent runs, and the run escalates to it automatically if the default connection cannot serve. If the run reports it could not read any results, try residential before anything else.

## `resumeFromRunId` (type: `string`):

Paste a previous run ID or dataset ID to continue a large crawl without returning or charging for records already collected there. Use this after an interrupted or capped run. For recurring monitoring of the same search, use Incremental mode below instead.

## `incrementalMode` (type: `boolean`):

Turn this on for daily or weekly recurring monitoring of the same search, for example watching a wishlist. The first run returns everything matching as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED records. Availability changes (an item being borrowed or returned), retail value moves and monthly price moves ARE reported as UPDATED: on a rental closet they are the signal, not noise. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). State is kept separately per search, URL and filter setup; use State key to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.

## `stateKey` (type: `string`):

Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the search terms, URLs and filters, so two different searches never mix state.

## `emitUnchanged` (type: `boolean`):

Off by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want a full snapshot every run.

## `emitExpired` (type: `boolean`):

Off by default. Turn on to also return records that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search: not when Max items capped it, not when Resume was used, and not when the run was refused. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking.

## `ignoreFieldsForChanges` (type: `array`):

Optional. Extra top-level field names to exclude from incremental change detection, on top of the built-in list (raw is ignored by default: it re-embeds the whole upstream item object each run). Use when a field moves every run without the item changing.

## `mcpConnectors` (type: `array`):

Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API and Integrations, then select it here. Notion gets a page per record; other connectors get a best-effort write or digest. Each connector receives a condensed summary per record, not the full record; the complete record always stays in the dataset. Leave empty to skip; this never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).

## `notionParentPageUrl` (type: `string`):

URL or id of the Notion page under which record pages are created. Required to enable the Notion export; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Cap on records written to each connector per run. Does not affect the dataset.

## Actor input object example

```json
{
  "mode": "search",
  "searchTerms": [
    "chanel flap"
  ],
  "categories": [],
  "brands": [],
  "colors": [],
  "occasions": [],
  "materials": [],
  "tiers": [],
  "newArrivals": false,
  "urls": [
    "https://www.vivrelle.com/products/caviar-slim-vanity-case-with-chain-32",
    "https://www.vivrelle.com/collection?collection=Handbags",
    "https://www.vivrelle.com/collection?brand=Chanel&page=2",
    "https://www.vivrelle.com/collection/morganstewart"
  ],
  "fetchDetails": true,
  "maxItems": 20,
  "maxPages": 0,
  "proxy": {
    "useApifyProxy": true
  },
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "ignoreFieldsForChanges": [],
  "maxNotifyListings": 50
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `detail` (type: `string`):

No description

## `changes` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "search",
    "searchTerms": [
        "chanel flap"
    ],
    "categories": [],
    "brands": [],
    "colors": [],
    "occasions": [],
    "materials": [],
    "tiers": [],
    "newArrivals": false,
    "urls": [
        "https://www.vivrelle.com/products/caviar-slim-vanity-case-with-chain-32",
        "https://www.vivrelle.com/collection?collection=Handbags",
        "https://www.vivrelle.com/collection?brand=Chanel&page=2",
        "https://www.vivrelle.com/collection/morganstewart"
    ],
    "fetchDetails": true,
    "maxItems": 20,
    "proxy": {
        "useApifyProxy": true
    },
    "incrementalMode": false,
    "emitUnchanged": false,
    "emitExpired": false,
    "ignoreFieldsForChanges": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/vivrelle-com-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "search",
    "searchTerms": ["chanel flap"],
    "categories": [],
    "brands": [],
    "colors": [],
    "occasions": [],
    "materials": [],
    "tiers": [],
    "newArrivals": False,
    "urls": [
        "https://www.vivrelle.com/products/caviar-slim-vanity-case-with-chain-32",
        "https://www.vivrelle.com/collection?collection=Handbags",
        "https://www.vivrelle.com/collection?brand=Chanel&page=2",
        "https://www.vivrelle.com/collection/morganstewart",
    ],
    "fetchDetails": True,
    "maxItems": 20,
    "proxy": { "useApifyProxy": True },
    "incrementalMode": False,
    "emitUnchanged": False,
    "emitExpired": False,
    "ignoreFieldsForChanges": [],
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/vivrelle-com-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "search",
  "searchTerms": [
    "chanel flap"
  ],
  "categories": [],
  "brands": [],
  "colors": [],
  "occasions": [],
  "materials": [],
  "tiers": [],
  "newArrivals": false,
  "urls": [
    "https://www.vivrelle.com/products/caviar-slim-vanity-case-with-chain-32",
    "https://www.vivrelle.com/collection?collection=Handbags",
    "https://www.vivrelle.com/collection?brand=Chanel&page=2",
    "https://www.vivrelle.com/collection/morganstewart"
  ],
  "fetchDetails": true,
  "maxItems": 20,
  "proxy": {
    "useApifyProxy": true
  },
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "ignoreFieldsForChanges": []
}' |
apify call abotapi/vivrelle-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abotapi/vivrelle-com-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/QoLA7EWFOgRt4wicc/builds/RVrIe0hamq5v2EyTl/openapi.json
