# Farmacias del Ahorro Product & Price Scraper (`pmodinger/farmacias-del-ahorro-mexico`) Actor

Extrae productos de Farmacias del Ahorro con SKU, marca, precio, stock y receta. Scraper y API para monitoreo farmacéutico y análisis de catálogo. Exporta en JSON, CSV o Excel e intégralo por API, webhooks y automatizaciones.

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

## Pricing

from $1.00 / 1,000 producto entregados

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

El **Farmacias del Ahorro Scraper** convierte datos públicos de [Farmacias del Ahorro](https://www.fahorro.com/) en registros estructurados y listos para análisis. Organiza búsquedas de medicamentos, cuidado personal y bienestar para analizar precios, stock, marca, receta, marketplace y cobertura de catálogo.

Esta es una herramienta independiente y no oficial de **Latin America Data**. No está afiliada, patrocinada ni operada por Farmacias del Ahorro.

### Qué puedes extraer con Farmacias del Ahorro Scraper

- ID de producto, SKU, título, marca y categorías.
- Precio actual, precio anterior y moneda.
- Stock, requisito de receta, marca propia y marketplace.
- Imagen, posición, página y URL verificable.

Cada registro conserva `source_url` para comprobar la información. Los campos que la fuente no publique permanecen vacíos; el actor no inventa valores para completar el dataset.

### Casos de uso para datos de Farmacias del Ahorro

- Comparar precios de medicamentos y productos de cuidado personal.
- Monitorear stock, marcas propias y presencia de marketplace.
- Analizar surtido por categoría y condición de receta.
- Crear reportes de retail farmacéutico y alertas de disponibilidad.

### Qué preguntas puede responder este dataset

La señal de receta, la marca propia y el stock permiten estudiar el catálogo farmacéutico más allá del precio. Puedes separar productos regulados, identificar alternativas de marca y medir disponibilidad por consulta. Para análisis responsables, usa estos datos como referencia comercial y valida siempre información médica o de dispensación en la fuente oficial.

### Cómo usar Farmacias del Ahorro Scraper

1. Abre la pestaña **Input** e indica la búsqueda, los filtros o las URLs necesarias.
2. Para una primera validación, usa un límite pequeño y revisa el formato de salida.
3. Pulsa **Start** y espera a que termine la ejecución en Apify Console.
4. Abre el dataset para revisar, descargar o integrar los resultados.

#### Principales campos de entrada

| Campo | Nombre en el formulario | Para qué sirve | Valor inicial |
| --- | --- | --- | --- |
| `query` | Término de búsqueda | Producto, marca, categoría, cargo o palabra clave que deseas buscar en Farmacias del Ahorro. | `paracetamol` |
| `pageSize` | Resultados por página | Cantidad solicitada por página, dentro del rango admitido por la fuente. | `24` |
| `startPage` | Página inicial | Página desde la que comenzará la extracción. | `1` |
| `maxItems` | Máximo de resultados | Límite opcional de resultados. Déjalo vacío para continuar mientras existan registros nuevos. | opcional |
| `maxPages` | Máximo de páginas | Límite opcional de páginas. Déjalo vacío para recorrer toda la búsqueda disponible. | opcional |

Los límites de resultados y páginas sólo restringen la extracción cuando reciben un valor. Si quedan vacíos, el actor continúa mientras la fuente entregue registros nuevos dentro del alcance solicitado.

#### Ejemplo de entrada

```json
{
  "query": "paracetamol"
}
````

### Datos de salida de Farmacias del Ahorro Scraper

- Producto: `product_id`, `sku`, `title`, `brand` y `categories`.
- Precio: `price`, `previous_price` y `currency`.
- Farmacia: `stock`, `prescription_required`, `own_brand` y `marketplace`.
- Auditoría: `source_url`, `search_url`, `page`, `rank` y `scraped_at`.

Una fila usa `status=success` cuando contiene un producto entregado. Una consulta válida sin coincidencias puede devolver `no_results`; una indisponibilidad controlada se identifica como `blocked` o `failed`. Estas filas operativas mantienen la ejecución auditable y no se cobran como resultado.

El dataset puede descargarse como **JSON, CSV o Excel**. También puedes consumir los registros desde la API de Apify sin cambiar el formato definido por el actor.

### API, integraciones y automatización para Farmacias del Ahorro

Ejecuta este web scraper desde Python, JavaScript, cURL, MCP o la API de Apify. Para seguimiento continuo, guarda el input como tarea y conecta horarios o webhooks con tu base de datos, hoja de cálculo, CRM, BI o flujo de alertas.

### Precio de Farmacias del Ahorro Scraper

El precio actual es **USD 0.001 por producto entregado**; 1.000 resultados exitosos representan USD 1.00 en eventos de resultado. Las filas `no_results`, `blocked` y `failed` no se cobran. El usuario asume el uso de la plataforma y puede definir límites para controlar volumen y costo.

### Preguntas frecuentes sobre Farmacias del Ahorro

#### ¿El dataset indica si un producto requiere receta?

Sí, cuando la fuente lo publica el campo `prescription_required` permite distinguir esa condición.

#### ¿Puedo usarlo para comparar precios farmacéuticos?

Sí. Ejecuta las mismas consultas en diferentes fechas y compara `price`, `previous_price` y `stock`.

### Otros scrapers y APIs de datos de México

- [Farmacias Guadalajara Product & Price Scraper](https://apify.com/pmodinger/farmacias-guadalajara-mexico)
- [Farmacias Similares Product & Price Scraper](https://apify.com/pmodinger/farmacias-similares-mexico)
- [Chedraui Mexico Product & Price Data Scraper](https://apify.com/pmodinger/chedraui-mexico)

### Uso responsable

Usa los datos con una finalidad legítima, respeta la legislación y los términos aplicables, y valida decisiones importantes en los enlaces de origen. Las marcas y nombres comerciales pertenecen a sus respectivos titulares.

# Actor input Schema

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

Producto, marca, categoría, cargo o palabra clave que deseas buscar en Farmacias del Ahorro.

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

Límite opcional de resultados. Déjalo vacío para continuar mientras existan registros nuevos.

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

Límite opcional de páginas. Déjalo vacío para recorrer toda la búsqueda disponible.

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

Página desde la que comenzará la extracción.

## `pageSize` (type: `integer`):

Cantidad solicitada por página, dentro del rango admitido por la fuente.

## `requestTimeoutSecs` (type: `integer`):

Segundos máximos de espera antes de considerar fallida una solicitud.

## `retries` (type: `integer`):

Cantidad de intentos controlados ante una indisponibilidad temporal.

## `failOnNoResults` (type: `boolean`):

Si se activa, una búsqueda válida sin coincidencias finaliza como error.

## Actor input object example

```json
{
  "query": "paracetamol",
  "startPage": 1,
  "pageSize": 24,
  "requestTimeoutSecs": 45,
  "retries": 3,
  "failOnNoResults": false
}
```

# Actor output Schema

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

No description

## `summary` (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("pmodinger/farmacias-del-ahorro-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("pmodinger/farmacias-del-ahorro-mexico").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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 pmodinger/farmacias-del-ahorro-mexico --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=pmodinger/farmacias-del-ahorro-mexico",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Farmacias del Ahorro Product & Price Scraper",
        "description": "Extrae productos de Farmacias del Ahorro con SKU, marca, precio, stock y receta. Scraper y API para monitoreo farmacéutico y análisis de catálogo. Exporta en JSON, CSV o Excel e intégralo por API, webhooks y automatizaciones.",
        "version": "0.1",
        "x-build-id": "blLc9kKpbKOHZH6jQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/pmodinger~farmacias-del-ahorro-mexico/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-pmodinger-farmacias-del-ahorro-mexico",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/pmodinger~farmacias-del-ahorro-mexico/runs": {
            "post": {
                "operationId": "runs-sync-pmodinger-farmacias-del-ahorro-mexico",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/pmodinger~farmacias-del-ahorro-mexico/run-sync": {
            "post": {
                "operationId": "run-sync-pmodinger-farmacias-del-ahorro-mexico",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "query"
                ],
                "properties": {
                    "query": {
                        "title": "Término de búsqueda",
                        "type": "string",
                        "description": "Producto, marca, categoría, cargo o palabra clave que deseas buscar en Farmacias del Ahorro.",
                        "default": "paracetamol"
                    },
                    "maxItems": {
                        "title": "Máximo de resultados",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Límite opcional de resultados. Déjalo vacío para continuar mientras existan registros nuevos."
                    },
                    "maxPages": {
                        "title": "Máximo de páginas",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Límite opcional de páginas. Déjalo vacío para recorrer toda la búsqueda disponible."
                    },
                    "startPage": {
                        "title": "Página inicial",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Página desde la que comenzará la extracción.",
                        "default": 1
                    },
                    "pageSize": {
                        "title": "Resultados por página",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Cantidad solicitada por página, dentro del rango admitido por la fuente.",
                        "default": 24
                    },
                    "requestTimeoutSecs": {
                        "title": "Tiempo máximo por solicitud",
                        "minimum": 15,
                        "maximum": 180,
                        "type": "integer",
                        "description": "Segundos máximos de espera antes de considerar fallida una solicitud.",
                        "default": 45
                    },
                    "retries": {
                        "title": "Reintentos automáticos",
                        "minimum": 1,
                        "maximum": 6,
                        "type": "integer",
                        "description": "Cantidad de intentos controlados ante una indisponibilidad temporal.",
                        "default": 3
                    },
                    "failOnNoResults": {
                        "title": "Fallar sin resultados",
                        "type": "boolean",
                        "description": "Si se activa, una búsqueda válida sin coincidencias finaliza como error.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
