# Booking Camoufox Probe (dev diagnostic) (`parsing_machine/booking-camoufox-probe`) Actor

Internal diagnostic: renders a Booking.com search page with our in-house Camoufox on an Apify RESIDENTIAL exit to test whether it clears the AWS WAF mp\_verify wall at $0. Dumps HTML to the key-value store. Not for publication.

- **URL**: https://apify.com/parsing\_machine/booking-camoufox-probe.md
- **Developed by:** [Iakov Iudin](https://apify.com/parsing_machine) (community)
- **Categories:** News, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Casas Bahia Scraper — Brazil Retail Prices & Specs

Scrape product listings from **Casas Bahia** (casasbahia.com.br), one of Brazil's
largest retailers, by category or search URL. Get clean, structured product data
you can pipe straight into price monitoring, market research, repricing, or a
catalog feed — **pay per product returned**, no subscription.

### What you get

One row per product, in the order it appears on the page:

| Field | Description |
|-------|-------------|
| `product_id` | Casas Bahia product id (from the `/p/<id>` URL) |
| `title` | Full product name |
| `url` | Canonical product page URL |
| `price` | Cash / à-vista price as a number (BRL) |
| `price_string` | Price as shown (e.g. `R$ 776,67`) |
| `currency` | Always `BRL` |
| `installment` | Installment terms (e.g. `por R$ 776,67 ou em até 10x de R$ 77,67 sem juros`) |
| `rating` | Average star rating (0–5) |
| `reviews_count` | Number of customer reviews |
| `is_sponsored` | `true` if the slot is a sponsored placement |
| `image_url` | Product image URL |
| `position` | Position on the page (0-based) |
| `source_url` | The listing URL this product came from |
| `scraped_at` | ISO 8601 timestamp of the run |

### Input

| Field | Type | Description |
|-------|------|-------------|
| `startUrls` | array | Category / search listing URLs to scrape, e.g. `https://www.casasbahia.com.br/smartphone/b`. Paste any listing page from the site. |
| `categoryUrl` | string | Convenience: a single listing URL added to the list. |
| `maxItems` | integer | Max products to return across all listings (default 60; `0` = unlimited). |

Find a listing URL by browsing the site to any category or search-results page and
copying the address — for example `…/geladeira/b`, `…/notebook/b`,
`…/smartphone/b`. The scraper paginates automatically until `maxItems` is reached.

#### Example input

```json
{
  "startUrls": [
    { "url": "https://www.casasbahia.com.br/smartphone/b" }
  ],
  "maxItems": 60
}
```

### Access & reliability

Casas Bahia renders its product grid client-side behind a bot-defence edge.
This actor reaches the site through a **built-in managed residential exit
(Brazil)** and a real browser, so the grid renders exactly as a shopper sees it —
**no proxy account, key, or setup is required on your side.** Parsing keys on
structural test hooks (not styling classes), so it keeps working across the
site's front-end redeploys.

### Pricing

Pay per product returned (pay-per-result). You are charged only for products
actually delivered to your dataset — failed or empty pages cost nothing.

# Actor input Schema

## `query` (type: `string`):

City to search Booking.com for (e.g. Paris).

## `language` (type: `string`):

Booking language code (e.g. en).

## `currency` (type: `string`):

Currency code (e.g. USD).

## `country` (type: `string`):

Two-letter country for the RESIDENTIAL exit. Leave blank to let Apify pick.

## Actor input object example

```json
{
  "query": "Paris",
  "language": "en",
  "currency": "USD",
  "country": ""
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset containing Casas Bahia product records (product\_id, title, price, price\_string, currency, installment, rating, reviews\_count, is\_sponsored, image\_url, url, scraped\_at).

# 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 = {
    "query": "Paris",
    "language": "en",
    "currency": "USD"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsing_machine/booking-camoufox-probe").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 = {
    "query": "Paris",
    "language": "en",
    "currency": "USD",
}

# Run the Actor and wait for it to finish
run = client.actor("parsing_machine/booking-camoufox-probe").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 '{
  "query": "Paris",
  "language": "en",
  "currency": "USD"
}' |
apify call parsing_machine/booking-camoufox-probe --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsing_machine/booking-camoufox-probe"
        }
    }
}

```

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/qkcaMp8DYltA2jPya/builds/YvMoI8JyuCgsQd8i4/openapi.json
