# Cobasi Pet Products Scraper (`automation-lab/cobasi-brazil-pet-product-catalog`) Actor

Search and export Cobasi Brazil pet products with SKU variants, prices, promotions, availability, images, and source URLs.

- **URL**: https://apify.com/automation-lab/cobasi-brazil-pet-product-catalog.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.23 / 1,000 item extracteds

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?

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

## Cobasi Pet Products Scraper

Search and export **Cobasi pet products** from Brazil as analysis-ready SKU records.
Get product identity, EAN, brand, category, pack variant, current BRL price, list price,
promotion status, public availability, image, and canonical Cobasi URL.

Use the Actor for one-time catalog research or schedule the same input to create
repeatable assortment, price, promotion, and stock snapshots.

### What does Cobasi Pet Products Scraper do?

The Actor accepts Portuguese search terms and public `cobasi.com.br` product,
category, or search URLs.
It reads Cobasi's public catalog data and saves one dataset row per SKU variant.

It supports:

- keyword search across the Cobasi Brazil catalog;
- category extraction from a Cobasi category URL;
- exact product extraction, including all returned pack variants;
- pagination up to a user-controlled item limit;
- deduplication when inputs overlap;
- scheduled snapshots for comparison in your own database or spreadsheet.

It does not require a Cobasi account.
It does not add products to a cart, place orders, or access customer information.

### Who is it for?

- **Pet brands** tracking how their products are listed and priced at Cobasi.
- **Retail analysts** comparing assortment, promotions, and availability over time.
- **E-commerce teams** collecting structured competitor catalog snapshots.
- **Distributors** checking SKU, EAN, pack-size, and public offer data.
- **Data engineers** loading Brazilian pet-retail data into BI or monitoring pipelines.

### Why use this Actor?

The output is normalized at SKU-variant level instead of returning raw pages.
A multi-pack product therefore produces separate rows with its own SKU, EAN,
variant label, price, and availability.

The Actor uses a lightweight structured-data route rather than downloading images
or running a browser for every page.
That keeps normal runs fast, inexpensive, and suitable for recurring schedules.
Requests have bounded retries for temporary network, HTTP 429, and server errors.
Deterministic input and response errors fail clearly instead of returning a false empty success.

### What Cobasi product data can I extract?

| Field | Meaning |
| --- | --- |
| `productId` | Cobasi product-level identifier |
| `sku` | SKU/item identifier for one variant |
| `ean` | EAN barcode when exposed |
| `name` | Complete product and variant name |
| `brand` | Product brand |
| `category` | Most specific category path returned |
| `categories` | All returned Cobasi category paths |
| `variant` | Pack size, flavor, color, or other variant label |
| `price` | Current selling price in BRL |
| `listPrice` | Reference/list price in BRL |
| `discountPercent` | Calculated discount when list price exceeds price |
| `onPromotion` | Whether the current price is below list price |
| `available` | Public offer availability flag |
| `availableQuantity` | Public catalog quantity when exposed |
| `seller` | Seller attached to the selected offer |
| `imageUrl` | Primary product image |
| `sourceUrl` | Canonical Cobasi product page |
| `searchSource` | Search term or URL that found the row |
| `scrapedAt` | ISO timestamp for the snapshot |

Fields may be `null` when Cobasi does not expose that value for a SKU.
Prices are snapshots from the public catalog and may change after collection.

### How to scrape Cobasi pet products

1. Open the Actor in Apify Console.
2. Add one or more Portuguese terms under **Search queries**.
3. Optionally add public Cobasi product or category URLs.
4. Set **Maximum SKU records** to control run size.
5. Click **Start**.
6. Open the **Cobasi products** dataset view.
7. Export JSON, CSV, Excel, XML, or connect the dataset API.

A small search input:

```json
{
  "searchQueries": ["ração para cães"],
  "maxItems": 25
}
```

### Input parameters

#### `searchQueries`

An array of non-empty search strings.
Use words a shopper would enter on Cobasi, for example:

```json
["ração para cães", "areia para gatos", "brinquedo para papagaio"]
```

At least one search query or start URL must be present.
Duplicate search strings are removed.

#### `startUrls`

Optional public Cobasi URLs in Apify request-list format:

```json
[
  { "url": "https://www.cobasi.com.br/cachorro/racao" },
  { "url": "https://www.cobasi.com.br/racao-gran-plus-choice-frango-e-carne-caes-adultos-3853925/p" }
]
```

Supported URL types:

- product pages ending in `/p`;
- category pages;
- Cobasi search pages containing `terms` or `q`.

Other hosts and direct internal API URLs are rejected.
The Cobasi home page alone is not a catalog scope.

#### `maxItems`

Maximum number of SKU-variant records across all inputs.
The allowed range is 1–5,000 and the default is 50.
The limit applies after deduplication.

### Output example

A current product variant has this shape:

```json
{
  "productId": "3853925",
  "sku": "915700",
  "ean": "7896048918536",
  "name": "Ração GranPlus Choice Cães Adultos Frango e Carne 10,1 kg",
  "brand": "GranPlus",
  "category": "Cachorros/Alimentação/Ração seca",
  "categories": [
    "Cachorros/Alimentação/Ração seca",
    "Cachorros/Alimentação",
    "Cachorros"
  ],
  "variant": "10,1 kg",
  "price": 98.1,
  "listPrice": 119.99,
  "discountPercent": 18.24,
  "onPromotion": true,
  "currency": "BRL",
  "available": true,
  "availableQuantity": 100,
  "seller": "Cobasi",
  "imageUrl": "https://cobasi.vteximg.com.br/arquivos/ids/1000000/product.webp",
  "sourceUrl": "https://www.cobasi.com.br/racao-gran-plus-choice-frango-e-carne-caes-adultos-3853925/p",
  "searchSource": "search:ração para cães",
  "scrapedAt": "2026-09-01T12:00:00.000Z"
}
```

The example structure is representative.
Values are source snapshots and should not be treated as a price guarantee.

### How much does it cost to scrape Cobasi pet products?

Pay-per-event pricing has two parts:

- **Actor start:** $0.00045 once per run.
- **Cobasi product variant:** one event for each SKU row saved.

Per-item rates depend on your Apify pricing tier:

| Tier | Price per SKU variant |
| --- | ---: |
| FREE | $0.0004370 |
| BRONZE | $0.0003800 |
| SILVER | $0.0002964 |
| GOLD | $0.0002280 |
| PLATINUM | $0.0001520 |
| DIAMOND | $0.0001064 |

At BRONZE rates, 25 records cost about **$0.00995** including the start event.
At BRONZE rates, 100 records cost about **$0.03845** including the start event.
At BRONZE rates, 1,000 records cost about **$0.38045** including the start event.

Only rows saved to the dataset receive an item charge.
Empty results do not create item charges.
Apify platform usage is covered by the Actor's PPE model rather than billed to you separately.

### Monitor assortment and prices on a schedule

A practical recurring workflow is:

1. Save a stable query or category URL as an Apify Task.
2. Schedule it daily or weekly.
3. Export each run's dataset to your warehouse, Google Sheets, or object storage.
4. Match snapshots by `sku`.
5. Compare `price`, `listPrice`, `onPromotion`, and `available`.
6. Alert from your own workflow when a SKU appears, disappears, or changes.

The Actor returns snapshots.
It does not maintain history or send change alerts by itself.

### Export Cobasi data to spreadsheets and pipelines

Every run uses the default Apify dataset, so standard integrations work without
custom storage handling.
You can:

- download CSV or Excel from Console;
- fetch JSON through the dataset API;
- connect Make, Zapier, n8n, or webhooks;
- load rows into BigQuery, Snowflake, PostgreSQL, or a data lake;
- create dashboards by brand, category, promotion, or availability.

Use `sku` as the variant key and retain `scrapedAt` as the observation time.

### Run with the Apify API

Replace `YOUR_TOKEN` with an Apify API token.

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~cobasi-brazil-pet-product-catalog/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["areia para gatos"],"maxItems":100}'
```

To wait and receive dataset items directly:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~cobasi-brazil-pet-product-catalog/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["ração para cães"],"maxItems":25}'
```

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/cobasi-brazil-pet-product-catalog').call({
  searchQueries: ['ração para cães'],
  maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient(token="YOUR_TOKEN")
run = client.actor("automation-lab/cobasi-brazil-pet-product-catalog").call(
    run_input={"searchQueries": ["areia para gatos"], "maxItems": 100}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Use with Apify MCP

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/cobasi-brazil-pet-product-catalog"
```

#### Claude Desktop

Add this server to the `mcpServers` object in Claude Desktop's configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/cobasi-brazil-pet-product-catalog"
    }
  }
}
```

#### Cursor

Open **Settings → Tools & MCP → Add custom MCP** and use the same Apify MCP URL:

```text
https://mcp.apify.com?tools=automation-lab/cobasi-brazil-pet-product-catalog
```

#### VS Code

Add an HTTP MCP server named `apify` to your workspace or user MCP configuration,
using the same URL shown above.

Example prompts:

- “Search Cobasi for ração renal and return the first 50 SKU variants.”
- “Extract every variant from this Cobasi product URL and compare price to list price.”
- “Run my Cobasi cat-litter Task and summarize unavailable SKUs.”

### Reliability and retries

Normal runs use Cobasi's public structured catalog route.
Each request has a 30-second timeout.
The Actor retries temporary network failures, HTTP 429, and server errors up to
three total attempts with bounded backoff.

It does not blindly retry:

- malformed inputs;
- unsupported domains;
- ordinary invalid-target HTTP errors;
- unexpected non-JSON responses;
- source schema changes that require an implementation update.

A nonsense search can validly return zero rows.
A blocked or malformed upstream response fails the run instead of being reported as an empty catalog.

### Tips and limitations

- Search in Portuguese for the most relevant Cobasi results.
- Use narrow queries or category URLs when monitoring a stable assortment.
- Product URLs are best when you need every currently exposed pack variant.
- `availableQuantity` is a public catalog value, not a warehouse guarantee.
- Availability and offers can vary after collection or by shopping context.
- Some fields are absent on some products and are returned as `null`.
- Results reflect the current public Cobasi Brazil catalog, not historical values.
- Large limits take more requests and may be affected by source rate limits.
- The Actor does not scrape reviews, customer data, orders, or account-only prices.
- The Actor does not promise that every public catalog item matches every search term.

### Responsible use and legality

This Actor accesses public product information.
You are responsible for ensuring your use complies with applicable laws,
Cobasi's terms, contractual duties, and Apify's policies.

Do not use output to misrepresent prices or availability.
Do not attempt to identify customers or combine product data with unlawfully
obtained personal information.
Use reasonable schedules and limits to avoid unnecessary load on the source.

### Troubleshooting

#### Why did my run return no rows?

Check the spelling and try the same term on Cobasi Brazil.
A highly specific or discontinued product phrase may have no current match.
For an exact product, supply its public `/p` URL.

#### Why did my input fail immediately?

Confirm that `maxItems` is between 1 and 5,000 and every `startUrls` entry uses
`cobasi.com.br`.
At least one query or URL is required after defaults are resolved.

#### Why are price or EAN fields null?

Cobasi does not expose every field for every offer or variant.
Null values preserve that distinction instead of inventing data.

#### Why are there fewer rows than the limit?

The source may have fewer matches, multiple inputs may overlap, or products may
contain fewer valid SKU variants than requested.
`maxItems` is a ceiling, not a promised minimum.

### Related Automation Lab Actors

- [Best Buy Product Catalog Scraper](https://apify.com/automation-lab/best-buy-product-catalog-scraper) for US electronics catalog monitoring.
- [ASDA Grocery Products & Prices](https://apify.com/automation-lab/asda-grocery-products-prices) for UK grocery assortment and price snapshots.
- [IKEA Product Catalog Scraper](https://apify.com/automation-lab/ikea-product-catalog-scraper) for multi-locale home-furnishing catalog research.

These are separate sources.
Choose this Actor when the required source is the public Cobasi Brazil pet-product catalog.

### FAQ

#### Does it require a Cobasi login?

No. It reads public catalog information.

#### Does one product always equal one row?

No. One product can contain several SKU variants, and each variant is saved as a separate row.

#### Can I scrape a category instead of a search?

Yes. Add a public Cobasi category URL to `startUrls`.

#### Can it monitor changes automatically?

Schedule an Apify Task and compare datasets in your own workflow.
The Actor creates timestamped snapshots but does not store history or send alerts itself.

#### Can I export to CSV or Excel?

Yes. Use the dataset export controls in Apify Console or a dataset API endpoint.

#### Does it use a proxy or browser?

The selected public catalog route works directly, so the Actor does not enable an
automatic paid proxy or browser fallback.
This keeps the supported workflow lightweight and avoids unmeasured proxy charges.

#### Are prices guaranteed?

No. They are public source snapshots collected at `scrapedAt` and can change afterward.

# Actor input Schema

## `searchQueries` (type: `array`):

Portuguese product searches to run against the public Cobasi catalog, such as ração para cães or areia para gatos.

## `startUrls` (type: `array`):

Optional public cobasi.com.br product, category, or search-page URLs. Product URLs return their available SKU variants.

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

Maximum number of product-variant records saved across all searches and URLs.

## Actor input object example

```json
{
  "searchQueries": [
    "ração para cães"
  ],
  "startUrls": [
    {
      "url": "https://www.cobasi.com.br/cachorro/racao"
    }
  ],
  "maxItems": 20
}
```

# Actor output Schema

## `dataset` (type: `string`):

Structured product-variant records from the run.

# 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 = {
    "searchQueries": [
        "ração para cães"
    ],
    "startUrls": [
        {
            "url": "https://www.cobasi.com.br/cachorro/racao"
        }
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/cobasi-brazil-pet-product-catalog").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 = {
    "searchQueries": ["ração para cães"],
    "startUrls": [{ "url": "https://www.cobasi.com.br/cachorro/racao" }],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/cobasi-brazil-pet-product-catalog").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 '{
  "searchQueries": [
    "ração para cães"
  ],
  "startUrls": [
    {
      "url": "https://www.cobasi.com.br/cachorro/racao"
    }
  ],
  "maxItems": 20
}' |
apify call automation-lab/cobasi-brazil-pet-product-catalog --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/cobasi-brazil-pet-product-catalog"
        }
    }
}

```

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/erDsLNmZeo7R4N1Lk/builds/D6a9LIm5uO5JDoHaD/openapi.json
