# Soriana Mexico Scraper: Products, Prices & Offers (`latinamericadata/soriana-mexico`) Actor

Extract Soriana Mexico products, MXN prices, brands, promotions and product URLs. Search multiple terms, monitor catalog changes and export JSON, CSV or Excel.

- **URL**: https://apify.com/latinamericadata/soriana-mexico.md
- **Developed by:** [Latin America Data](https://apify.com/latinamericadata) (community)
- **Categories:** E-commerce
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 product delivereds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Soriana Mexico Scraper & API

Extract **Soriana Mexico products and prices in MXN** for price monitoring, promotion analysis and product catalog research. Search one term or multiple terms and export real product records as JSON, CSV or Excel through Apify.

Independent tool by Latin America Data. Not affiliated with or endorsed by Soriana Mexico. Source: https://www.soriana.com/.

### What can you use it for?

- Compare matching products across Mexican retailers using identifiers, brands and original product URLs.
- Build your own price history by scheduling repeated runs and storing dated records.
- Track advertised promotions separately from ordinary prices.
- Research product assortment and catalog changes without manually copying listings.

### Quick start

For a low-cost check:

```json
{"term":"leche","maxItems":3,"maxRuntimeSecs":90}
```

To search without an explicit result or page limit:

```json
{"searchTerms":["leche","cafe"],"maxRuntimeSecs":600}
```

No proxy configuration is required. Omit `maxItems` and `maxPages` to continue until source exhaustion, the runtime budget or your Apify spending limit. The default runtime budget is 240 seconds and can be increased to 7,200 seconds. A time budget is not a guarantee of full-catalog coverage.

### Input

| Field | Meaning |
| --- | --- |
| term | Product, brand or category to search. |
| searchTerms | Optional list of up to 100 searches; replaces term. |
| maxItems | Optional total number of unique products across all searches. No default cap. |
| maxPages | Optional pages per search. No default cap. |
| startPage | Starting page, default 1. |
| maxRuntimeSecs | Run safety budget, default 240; maximum 7,200 seconds. |

### Output

The dataset contains only genuine product records: `product_id`, `sku`, `title`, `brand`, `price`, `list_price`, `currency`, `discount_percent`, `available`, `availability_scope`, `promotions`, `image_url`, `source_url`, `search_term`, `page`, `rank`, `country`, `source`, `status` and `scraped_at`. Optional fields may be null. Do not interpret null as zero or unavailable.

Products are saved progressively by page and deduplicated across searches. Repeated products are charged once per run. Source rankings and totals can change while scraping.

`RUN_SUMMARY` records counts, pagination, stop reason, completeness and non-chargeable performance information. `DIAGNOSTICS` contains any empty, blocked or failed-run explanation, separately from the billable dataset.

- **success**: valid products returned. Check `complete` and `stop_reason` for limits.
- **no_results**: the source explicitly confirmed an empty search; zero product charges.
- **partial**: earlier valid products were retained after a later error or safety limit.
- **blocked / failed**: no products could be delivered. The run fails visibly instead of pretending that access denial is an empty catalog.

### Pricing

**USD 0.003 per delivered product**, plus Apify platform usage paid by the customer. 1,000 delivered products cost USD 3.00 in result fees, excluding compute, storage and automatic proxy usage. Empty searches and diagnostic records incur no result fee, but platform usage can still apply. Set a maximum total charge in Apify to control spending.

### Coverage and limitations

Soriana prices and availability refer to the default public online catalog. This release does not select a postal code or store and must not be used as branch-level inventory. The output explicitly marks `availability_scope=default_online_catalog` and `postal_code=null`. Some matching listings explicitly have no public price: they are excluded from charges and listed in `DIAGNOSTICS` and `RUN_SUMMARY.skipped_products` as `price_not_published`. Pagination continues past them. Such searches may deliver fewer priced products than the website's match count; full scans with exclusions report partial coverage. Brand and unit can be null when the listing does not expose them. Package sizes remain in the original product title. Multi-buy, loyalty, coupon and installment conditions remain separate in `promotions`; they are not subtracted from `price`.

The source serves Salesforce Commerce Cloud search pages with public product attributes and 24 products per page. Pagination uses the site's search offset and verifies its selected page. Mexican residential access is managed automatically when needed.

The scraper preserves earlier output if a later page is blocked. It does not bypass logins, retrieve private customer data, fabricate products or promise access during every site outage. Unknown HTML is treated as an error, never automatically as no results.

### API and scheduled monitoring

Use Apify's API integration to start this Actor, retrieve its dataset, or schedule repeated searches. Each product includes its original URL and collection timestamp for auditing. Respect source terms, applicable law and responsible request rates. This Actor does not provide historical prices from before your runs.

# Actor input Schema

## `term` (type: `string`):

Producto, marca o categoria.

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

Opcional. Sustituye term. Productos repetidos se guardan una sola vez.

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

Opcional. Sin limite predeterminado; continua hasta agotar resultados, tiempo o presupuesto.

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

Opcional. Sin limite de paginas predeterminado.

## `startPage` (type: `integer`):

Primera pagina consultada.

## `maxRuntimeSecs` (type: `integer`):

Presupuesto de tiempo para proteger el costo. Conserva los productos ya obtenidos.

## Actor input object example

```json
{
  "term": "leche",
  "startPage": 1,
  "maxRuntimeSecs": 240
}
```

# Actor output Schema

## `products` (type: `string`):

No description

## `summary` (type: `string`):

No description

## `diagnostics` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("latinamericadata/soriana-mexico").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("latinamericadata/soriana-mexico").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 '{}' |
apify call latinamericadata/soriana-mexico --silent --output-dataset

```

## MCP server setup

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

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/B78RNtwxdBBmjYljM/builds/TNk1yoZEYtKQlUiJb/openapi.json
