# Magazine Luiza Scraper - Products, Prices, Sellers & Reviews (`abotapi/magazineluiza-com-br-scraper`) Actor

Scrape Magazine Luiza (magazineluiza.com.br) by keyword, brand, seller or URL. Extract product names, prices, cash and installment offers, sellers, ratings, stock, badges and attributes. Optional enrichment adds full product details and customer reviews.

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

## Pricing

from $1.60 / 1,000 product 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

## Magazine Luiza Scraper: Products, Prices, Installments & Ratings

Magazine Luiza Scraper turns Magazine Luiza (magazineluiza.com.br) search and category pages into clean product data. Get titles, brands, prices, list prices, discounts, cash payment prices, installment offers, sellers, ratings, review counts, stock status, badges, coupons and product attributes for every listing. Search by keyword, brand, seller and rating, or paste search, category, subcategory and product links, optionally add full product pages with customer reviews, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.

### Why This Scraper?

- **Two ways in.** Search by keyword with price, brand, seller, rating and sort options, or paste search, category, subcategory and product links and the filters in them are honored.
- **Optional full product pages.** Turn on **Fetch full product details** for the description, image gallery, specification sheet, variations, dimensions, seller legal name and tax id, rating breakdown and customer reviews.
- **Every price that matters.** Current price, list price, discount percent, the cash payment price and the best installment plan on every row.
- **Seller and stock on every row.** Seller name, whether Magalu itself sells the item, buy box flag and availability.
- **Rich product facts.** Ratings, review counts, badges, coupons, promotion dates, delivery tags and product attributes such as colour and capacity.
- **Sponsored flag.** Paid placements are marked so you can separate them from organic results.
- **Built for control.** One Max items cap sets the run size, pages walk forward until it is reached, and a refused run fails loudly instead of returning an empty dataset.

### Use Cases

- **Price monitoring:** track prices, discounts and cash price offers for products and brands over time.
- **Marketplace research:** compare sellers, brands and category mix for any keyword.
- **Catalog enrichment:** collect titles, images, attributes and ratings to fill your own product database.
- **Deal hunting:** sort by lowest price or best rated and feed the results into alerts.
- **Market analysis:** study installment terms, review volume and sponsored share across a category.

### Data You Get

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

| Field | Example |
| --- | --- |
| `productId` / `sku` | `"000000000"` / `"0000000"` |
| `title` | `"Sample Notebook 14 inch 8GB"` |
| `brand` | `"Sample Brand"` |
| `url` | Link to the product page |
| `price` / `listPrice` | `2999.0` / `3499.0` |
| `discountPercent` / `currency` | `14.3` / `"BRL"` |
| `cashPrice` | `2849.05` |
| `installmentCount` / `installmentAmount` / `installmentInterestFree` | `10` / `299.9` / `true` |
| `sellerName` | `"Sample Seller"` |
| `soldByMagalu` | `false` |
| `available` | `true` |
| `rating` / `reviewCount` | `4.7` / `120` |
| `category` / `subcategory` | `"Sample Category"` / `"Sample Subcategory"` |
| `sponsored` / `isBuyBox` | `false` / `false` |
| `coupon` | discount type and value when a coupon applies |
| `badges` / `tags` / `shippingTag` | promotion badges, product tags, delivery cost and time when shown |
| `attributes` | colour, capacity and other variant facts |
| `image` | Link to the main product image |
| `description` / `images` / `specifications` | Full text, image gallery and specification sheet (details on) |
| `variations` / `dimensions` / `keySellingPoints` | Colour and size options with links, weight and size, highlights (details on) |
| `sellerLegalName` / `sellerCnpj` / `sellerScore` | Seller legal details and score (details on) |
| `ratingBreakdown` / `ratingAspects` | Stars histogram and per-aspect ratings (details on) |
| `reviews` | Customer reviews with rating, text, date and variant (details on) |
| `searchQuery` / `page` / `position` | `"notebook"` / `1` / `4` |

### How to Use

1. Pick a **mode**: `search` (by keyword) or `url` (paste links).
2. Fill in the fields for that mode and set optional price, brand, seller, rating and sort options.
3. Set **Max items** to control run size and cost, then click **Start**.
4. Download the dataset as JSON, CSV or Excel, or read it through the API.

**Search with a price range:**

```json
{
  "mode": "search",
  "searchTerms": ["notebook"],
  "minPrice": 2000,
  "maxPrice": 3000,
  "maxItems": 40
}
```

**Lowest price first for two keywords:**

```json
{
  "mode": "search",
  "searchTerms": ["geladeira", "fogao"],
  "sortBy": "priceAsc",
  "maxItems": 100
}
```

**Brands, a seller and a minimum rating, with full details and reviews:**

```json
{
  "mode": "search",
  "searchTerms": ["notebook"],
  "brands": ["Samsung", "Lenovo"],
  "sellers": ["Magalu"],
  "minRating": "4",
  "includeDetails": true,
  "maxReviews": 20,
  "maxItems": 40
}
```

**Paste links:**

```json
{
  "mode": "url",
  "urls": [
    "https://www.magazineluiza.com.br/busca/notebook/",
    "https://www.magazineluiza.com.br/informatica/l/in/",
    "https://www.magazineluiza.com.br/notebook/informatica/s/in/note/",
    "https://www.magazineluiza.com.br/notebook-samsung-galaxy-book4-np750xgk-lg5br-intel-core-3-8gb-ram-256gb-ssd-156-full-hd-windows-11/p/242119700/in/nsbo/"
  ],
  "maxItems": 60
}
```

#### Run it from your code

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<ACTOR_ID>").call(run_input={"mode": "search", "searchTerms": ["notebook"], "maxItems": 20})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["price"])
```

**JavaScript:**

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('<ACTOR_ID>').call({ mode: 'search', searchTerms: ['notebook'], maxItems: 20 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].title, items[0].price);
```

#### Resume and recurring updates

Use **Resume from a previous run** to continue a large collection without paying again for products already returned. Use **Incremental changes** on a schedule to get only new, changed and returned products; fields that move with list position (page, position, sponsored flag, search term) never count as a change. When a price moves, the changed row also carries `previousPrice`, `priceChange` and `isPriceDrop`.

#### Tips

- A page holds about 40 products and a single search reaches roughly 1000 results, so split very broad searches by brand or price range.
- Prices in the filters are in reais and are matched against the cash (Pix) price, so a row's regular `price` can sit slightly above your maximum. Brands and sellers take plain names such as Samsung or Kabum; each one runs as its own search, so a name the store does not know simply returns nothing.
- Pasted links can be search pages, category pages, subcategory or brand/model pages and single product pages. A bare product id works too. Other pages (home, blog, seller storefronts) are skipped with a warning.
- **Fetch full product details** reads each product page once. Reviews are the ones the store shows on the product page, newest first, up to **Max reviews per product**. Product links always include details.
- Change detection compares the listing and price fields. Description, images, specifications and reviews are not compared.
- When several keywords are given, Max items is shared evenly between them.

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

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step **after** the scrape: the Apify dataset is never changed.

**What gets written to the connector:** a condensed, human-readable **summary** of each record, not the full JSON. Each item becomes one entry with a **title** and its key fields flattened to plain text. The **complete record always stays in the Apify dataset**.

1. Authorize a connector once under **Apify → Settings → Integrations** (Notion, Linear, Airtable, or Apify).
2. Select it in the **"Pipe results into your apps"** input field. (If the picker is empty, you haven't authorized a connector yet.)
3. For **Notion**, also set `notionParentPageUrl` to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

### Input Parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | string | `search` | `search` by keyword or `url` to paste links. |
| `searchTerms` | array | `["notebook"]` | Product keywords, used in search mode. |
| `sortBy` | string | `relevance` | Result order: relevance, lowest or highest price, lowest price with shipping, fastest delivery, best selling, best rated or newest. |
| `minPrice` | number | none | Minimum price in reais, matched against the cash (Pix) price. |
| `maxPrice` | number | none | Maximum price in reais, matched against the cash (Pix) price. |
| `brands` | array | none | Brand names such as Samsung. Each entry is searched separately. |
| `sellers` | array | none | Seller names such as Magalu or Kabum. Each entry is searched separately. |
| `minRating` | string | `any` | Only products rated at or above 3, 4 or 4.5 stars. |
| `excludeSponsored` | boolean | `false` | Leave out paid placements. |
| `availableOnly` | boolean | `false` | Skip products shown as unavailable. |
| `urls` | array | one sample link | Search, category, subcategory and product links, or product ids. Filters and sort set in the link are honored. |
| `maxPages` | integer | none | Optional page limit per search. Empty or 0 means no limit and it does not cap the run. |
| `maxItems` | integer | `20` | The single cap on the run. Set 0 for unlimited. |
| `includeDetails` | boolean | `false` | Read each product page for full details and reviews. |
| `maxReviews` | integer | `20` | Reviews per product when details are on. 0 skips reviews. |
| `proxy` | object | standard proxy | Connection settings. The standard pool is the default and works on every plan; Residential is recommended for the most reliable results. |
| `resumeFromRunId` | string | none | Run or dataset id of an earlier run; products already collected there are skipped and not charged again. |
| `incrementalMode` | boolean | `false` | For scheduled monitoring: later runs return only NEW, UPDATED and REAPPEARED products. Price, stock, discount and rating changes count as updates. |
| `stateKey` | string | auto | Optional name for a monitoring campaign; by default state is kept per search, link and filter setup. |
| `emitUnchanged` | boolean | `false` | Also return products that did not change, marked UNCHANGED. |
| `emitExpired` | boolean | `false` | Also return products that disappeared since the last run, marked EXPIRED. Only after a fully scanned search. |
| `ignoreFieldsForChanges` | array | none | Extra field names to keep out of change detection. |
| `mcpConnectors` | array | none | Optional MCP connectors to send results to. |
| `notionParentPageUrl` | string | none | Notion page under which record pages are created. |
| `maxNotifyListings` | integer | `50` | Cap on records written to each connector. |

### Output Example

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

```json
{
  "productId": "000000000",
  "sku": "0000000",
  "title": "Sample Notebook 14 inch 8GB",
  "brand": "Sample Brand",
  "url": "https://www.magazineluiza.com.br/sample-notebook/p/000000000/in/nsbo/",
  "price": 2999.0,
  "listPrice": 3499.0,
  "discountPercent": 14.3,
  "currency": "BRL",
  "cashPrice": 2849.05,
  "installmentCount": 10,
  "installmentAmount": 299.9,
  "sellerName": "Sample Seller",
  "soldByMagalu": false,
  "available": true,
  "rating": 4.7,
  "reviewCount": 120,
  "category": "Sample Category",
  "subcategory": "Sample Subcategory",
  "sponsored": false,
  "isBuyBox": false,
  "coupon": null,
  "badges": [],
  "tags": [],
  "attributes": [{"type": "color", "label": "Cor", "value": "Prata"}],
  "description": "Sample product description (details on).",
  "specifications": [{"group": "Ficha-Técnica", "name": "Processador", "value": "Sample"}],
  "reviews": [{"reviewId": "sample", "rating": 5, "text": "Sample review", "date": "2026-01-01T00:00:00Z"}],
  "searchQuery": "notebook",
  "page": 1,
  "position": 4
}
```

### Plan Requirement

The standard proxy pool is the default and works on every plan. Residential is recommended for the most reliable results, especially on large or frequent runs.

If the standard pool is refused for several requests in a row, the actor switches to Apify Residential for the rest of the run. Residential traffic is billed to your Apify plan, and the actor keeps it within a fixed per-run traffic budget. If you choose Residential yourself, the actor first tries the cheaper standard pool and only keeps using Residential when that pool is refused.

Apify free plans do not include residential proxies. On a free plan the run logs a warning and continues on a backup connection, so some pages may still be unavailable. For full residential access, upgrade your plan at https://apify.com/pricing or supply your own proxy URLs.

### FAQ

#### How much does it cost?

You pay per product record returned plus a small start fee. Turning on **Fetch full product details** adds a charge for each product returned with its full page, and each customer review delivered adds a review charge; products that are not returned (for example unchanged ones in incremental mode) are never charged for details or reviews. Set Max items and Max reviews per product to keep a run at the size you want.

#### Is it legal to scrape Magazine Luiza?

The actor reads publicly visible product listings. You are responsible for using the data in line with the site terms and the laws that apply to you.

#### Can I run it on a schedule?

Yes. Use Apify schedules and compare datasets between runs to track price changes.

#### Why did a run return fewer products than expected?

A single search reaches about 1000 results, and filters can narrow a search further. Split broad searches by brand or price range.

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

When no page could be read the run is marked failed with a message, so you never pay for an empty result. Retry later, or choose Residential in the proxy field. On a free plan the message says residential access is not included.

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

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

### 🔗 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/americanas-com-br-scraper"><b>Americanas Brazil</b></a><br>Scrape Americanas Brazil (americanas.com.br) by keyword, department or pasted link...</td><td>🔌 <a href="https://apify.com/abotapi/casasbahia-com-br-scraper"><b>Casas Bahia Brazil Electronics &amp; Home Goods Scraper</b></a><br>Scrape products from Casas Bahia Brazil by keyword, department, or URL. Filter by brand...</td></tr>
<tr><td>🛒 <a href="https://apify.com/abotapi/netshoes-scraper"><b>Netshoes Brazil</b></a><br>Scrape sportswear and footwear from netshoes.com.br. Search by keyword with the store's...</td><td>🧩 <a href="https://apify.com/abotapi/mercadolivre-com-br-scraper"><b>Mercado Livre Brazil</b></a><br>Scrape Mercado Livre Brazil's best-sellers, category and product-video feeds without...</td></tr>
<tr><td>🛒 <a href="https://apify.com/abotapi/drogasil-com-br-scraper"><b>Drogasil Brazil Pharmacy, Health &amp; Beauty Scraper</b></a><br>Scrape Drogasil (drogasil.com.br) medicines, health and beauty products by keyword...</td><td>🏠 <a href="https://apify.com/abotapi/zapimoveis-scraper"><b>Zap Imóveis Scraper</b></a><br>Scrape Zap Imóveis sale, rental and new-development listings by city, filters or URL...</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/magazineluiza-com-br-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`):

Search by keyword, or paste search and category links.

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

One or more product keywords, for example notebook or geladeira. Used only in search mode.

## `sortBy` (type: `string`):

Result order for search mode.

## `minPrice` (type: `number`):

Only products priced at or above this amount, in reais. The store applies it to the cash (Pix) price shown on each product. Leave empty for no minimum.

## `maxPrice` (type: `number`):

Only products priced at or below this amount, in reais. The store applies it to the cash (Pix) price shown on each product. Leave empty for no maximum.

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

Brand names such as Samsung, Lenovo or Apple, written the way the store's brand filter shows them. Every entry is searched separately (each brand adds one search per keyword), so results are not mixed. Leave empty for all brands.

## `sellers` (type: `array`):

Seller names such as Magalu, Kabum or Lenovo Oficial, written the way the store's Sold by filter shows them. Every entry is searched separately. Leave empty for all sellers. A name the store does not know returns no products and is reported in the log.

## `minRating` (type: `string`):

Only products rated at or above this score out of 5. Products with no rating yet are skipped when a minimum is set. Applied to the rows the store returns, so a strict minimum can return fewer products than Max items.

## `excludeSponsored` (type: `boolean`):

Leave out paid placements and keep organic results only.

## `availableOnly` (type: `boolean`):

Skip products shown as unavailable.

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

One link per line. Accepted: search pages, category pages, subcategory and brand/model pages, and single product pages (a bare product id also works). Search-mode filters (price, brand, seller) are ignored here; filters and sort set in a link are honored. Pagination walks forward from the page in the link.

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

Optional. Empty or 0 means no page limit; it does NOT cap the run and defers to Max items. One page holds about 40 products.

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

The single cap on this run: stop after this many products across all searches and links. Set 0 for unlimited.

## `includeDetails` (type: `boolean`):

Off by default. Turn on to read each product page as well: full description, image gallery, specification sheet, key selling points, variations, dimensions, seller legal name and tax id, rating breakdown and customer reviews. Billed as a detail charge per product returned with details. Product links always include details.

## `maxReviews` (type: `integer`):

Customer reviews to attach to each product when Fetch full product details is on (and for product links). The store shows the newest reviews on the product page, so a product never returns more than it displays there. Set 0 to skip reviews. Each delivered review is billed as one review charge.

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

The default standard pool works on every plan. Residential is recommended for the most reliable results, especially on large or frequent runs.

## `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 a price watch. The first run returns everything matching as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED records. Price moves, discount changes, stock changes and new reviews ARE reported as UPDATED: on a retail site they are the signal, not noise. Detail fields (description, images, specifications, reviews) are not compared, only the listing and price fields. 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`):

Incremental mode only. Extra field names to keep out of the change fingerprint, on top of the built-in list (page, position, search term and sponsored flag). Use this when a field moves on every run without the product changing. Price, discount, stock and rating fields are never ignored: on a retail site they are the signal.

## `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": [
    "notebook"
  ],
  "sortBy": "relevance",
  "minRating": "any",
  "excludeSponsored": false,
  "availableOnly": false,
  "urls": [
    "https://www.magazineluiza.com.br/busca/notebook/",
    "https://www.magazineluiza.com.br/informatica/l/in/",
    "https://www.magazineluiza.com.br/notebook/informatica/s/in/note/",
    "https://www.magazineluiza.com.br/motorola/celulares-e-smartphones/s/te/srmt/modelo---moto-g/",
    "https://www.magazineluiza.com.br/busca/notebook/?sortType=price&sortOrientation=asc&filters=brand---samsung",
    "https://www.magazineluiza.com.br/notebook-samsung-galaxy-book4-np750xgk-lg5br-intel-core-3-8gb-ram-256gb-ssd-156-full-hd-windows-11/p/242119700/in/nsbo/"
  ],
  "maxItems": 20,
  "includeDetails": false,
  "maxReviews": 20,
  "proxy": {
    "useApifyProxy": true
  },
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "ignoreFieldsForChanges": [],
  "maxNotifyListings": 50
}
```

# Actor output Schema

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

No description

## `details` (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": [
        "notebook"
    ],
    "urls": [
        "https://www.magazineluiza.com.br/busca/notebook/",
        "https://www.magazineluiza.com.br/informatica/l/in/",
        "https://www.magazineluiza.com.br/notebook/informatica/s/in/note/",
        "https://www.magazineluiza.com.br/motorola/celulares-e-smartphones/s/te/srmt/modelo---moto-g/",
        "https://www.magazineluiza.com.br/busca/notebook/?sortType=price&sortOrientation=asc&filters=brand---samsung",
        "https://www.magazineluiza.com.br/notebook-samsung-galaxy-book4-np750xgk-lg5br-intel-core-3-8gb-ram-256gb-ssd-156-full-hd-windows-11/p/242119700/in/nsbo/"
    ],
    "maxItems": 20,
    "includeDetails": false,
    "maxReviews": 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/magazineluiza-com-br-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": ["notebook"],
    "urls": [
        "https://www.magazineluiza.com.br/busca/notebook/",
        "https://www.magazineluiza.com.br/informatica/l/in/",
        "https://www.magazineluiza.com.br/notebook/informatica/s/in/note/",
        "https://www.magazineluiza.com.br/motorola/celulares-e-smartphones/s/te/srmt/modelo---moto-g/",
        "https://www.magazineluiza.com.br/busca/notebook/?sortType=price&sortOrientation=asc&filters=brand---samsung",
        "https://www.magazineluiza.com.br/notebook-samsung-galaxy-book4-np750xgk-lg5br-intel-core-3-8gb-ram-256gb-ssd-156-full-hd-windows-11/p/242119700/in/nsbo/",
    ],
    "maxItems": 20,
    "includeDetails": False,
    "maxReviews": 20,
    "proxy": { "useApifyProxy": True },
    "incrementalMode": False,
    "emitUnchanged": False,
    "emitExpired": False,
    "ignoreFieldsForChanges": [],
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/magazineluiza-com-br-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": [
    "notebook"
  ],
  "urls": [
    "https://www.magazineluiza.com.br/busca/notebook/",
    "https://www.magazineluiza.com.br/informatica/l/in/",
    "https://www.magazineluiza.com.br/notebook/informatica/s/in/note/",
    "https://www.magazineluiza.com.br/motorola/celulares-e-smartphones/s/te/srmt/modelo---moto-g/",
    "https://www.magazineluiza.com.br/busca/notebook/?sortType=price&sortOrientation=asc&filters=brand---samsung",
    "https://www.magazineluiza.com.br/notebook-samsung-galaxy-book4-np750xgk-lg5br-intel-core-3-8gb-ram-256gb-ssd-156-full-hd-windows-11/p/242119700/in/nsbo/"
  ],
  "maxItems": 20,
  "includeDetails": false,
  "maxReviews": 20,
  "proxy": {
    "useApifyProxy": true
  },
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "ignoreFieldsForChanges": []
}' |
apify call abotapi/magazineluiza-com-br-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abotapi/magazineluiza-com-br-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/ZOAiMrnWUzHzPIIPt/builds/AnJMW1h3RS7A5Ofht/openapi.json
