# Farmacias Guadalajara Scraper: Precio de Medicamentos y Ofertas (`getascraper/farmacias-guadalajara-scraper`) Actor

Farmacias Guadalajara scraper (precios de medicamentos): price, regular price, discount, 2x1 and 3x2 offers, brand, active ingredient, strength and price per tablet. Filter by category, brand or price. Track price drops, availability changes, new and removed products. One flat price per product.

- **URL**: https://apify.com/getascraper/farmacias-guadalajara-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (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.60 / 1,000 products

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

## 💊 Farmacias Guadalajara Scraper: Precio de Medicamentos y Ofertas

<table width="100%" style="margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#ECFDF5;border:1px solid #A7F3D0;border-top:4px solid #059669;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#064E3B;line-height:1.3">Every price, discount and promotion at Mexico's largest pharmacy chain, in one clean table.</span><br>
<span style="font-size:15px;color:#334155;line-height:1.6">Pull medicines, supplements, baby care and personal care from the public Farmacias Guadalajara store: price, regular price, discount, brand, active ingredient, strength and price per tablet. Schedule the same run to see price drops, stock changes, new products and removed products.</span>
</td>
</tr>
</table>
<table width="100%" style="margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #A7F3D0;border-radius:10px 0 0 10px;vertical-align:top">
<strong style="color:#047857;font-size:15px">🏷️ Real discounts</strong><br>
<span style="color:#334155;font-size:12px">Current price, regular price, discount amount and percent, plus 2x1 and 3x2 offers.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #A7F3D0;border-left:none;vertical-align:top">
<strong style="color:#047857;font-size:15px">💊 Medicine details</strong><br>
<span style="color:#334155;font-size:12px">Active ingredient, strength, presentation and prescription notice when the store states them.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #A7F3D0;border-left:none;vertical-align:top">
<strong style="color:#047857;font-size:15px">⚖️ Price per unit</strong><br>
<span style="color:#334155;font-size:12px">Compare pack sizes by price per tablet, capsule, gram or millilitre.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #A7F3D0;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<strong style="color:#047857;font-size:15px">🔔 Change alerts</strong><br>
<span style="color:#334155;font-size:12px">Price drops, back in stock, out of stock, new and removed products between runs.</span>
</td>
</tr>
</table>

Know what Farmacias Guadalajara charges, today and next week. This Actor reads the public store pages and returns one row per product with a stable product number and a link back to the page. Start from a category, a brand page or a product link, or search by product name. Anything the store does not publish is left out, never guessed.

### 👥 Who uses it

- **I run a pharma or consumer health brand** and need to see how my products are priced and discounted against competing brands in the same category.
- **I build a price comparison or health marketplace app** and need a fresh product and price feed for Mexico.
- **I analyse the Mexican pharmacy market** and want brand versus generic price gaps per active ingredient and per tablet.
- **I buy for a clinic, a pharmacy or a distributor** and want a weekly alert when a product I stock drops in price or goes out of stock.

### 🚀 How it works

<table width="100%" style="margin-top:0;margin-bottom:0">
<tr>
<td style="padding:16px 14px;width:33%;background:#ECFDF5;border:1px solid #A7F3D0;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#059669;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#064E3B">Choose what to collect</span><br>
<span style="font-size:12px;color:#334155">Paste category, brand or product links from the store, or type product names to search.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#ECFDF5;border:1px solid #A7F3D0;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#059669;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#064E3B">Set your filters</span><br>
<span style="font-size:12px;color:#334155">Brands, a price range, on sale only, or available to order only.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#ECFDF5;border:1px solid #A7F3D0;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#059669;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#064E3B">Export or schedule</span><br>
<span style="font-size:12px;color:#334155">Download Excel, CSV or JSON, or schedule the run and receive only what changed.</span>
</td>
</tr>
</table>

### 🔍 What does it do?

- Returns one row per product: name, brand, price, regular price, discount, promotions, strength, pack size and image.
- Lists a whole category or brand page, or finds products from words in their name.
- Filters before saving, so you only pay for products that match.
- With full product pages switched on, adds description, category trail, active ingredient, all images, prescription notice, indications and dosage text.
- Works out the price per unit only when the pack size is stated, for example per tablet or per gram.
- Keeps a named history of a list and marks every product as new, price drop, price increase, back in stock, out of stock, updated, unchanged or removed.
- Reads public store pages only. No account, no login and no personal data.

Availability means whether the store lists the product as available to order online. Stock at an individual branch is not part of the public pages.

### 💡 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| Category, brand or product links | array of URLs | No | Links from farmaciasguadalajara.com: a category, a brand page, an offers page or a single product page. |
| Product name search | array of strings | No | Words from a product name or brand. Every word must appear in the product name. |
| Brands | array of strings | No | Keep only these brands, for example BAYER or CERAVE. |
| Minimum price / Maximum price | number | No | Price range in Mexican pesos. |
| In stock only | boolean | No | Keep only products listed as available to order online. |
| On sale only | boolean | No | Keep only products priced below their regular price. |
| Read full product pages | boolean | No | Adds the detail fields to category results. Product links and name searches always include them. |
| Track changes between runs | boolean | No | Compares with the previous run of the same monitor and labels every product. |
| Monitor name | string | No | Keeps the history of one monitor. Use one name per list you track. |
| Only save changes | boolean | No | Skips unchanged products so you pay for changes only. |
| Maximum products | integer | No | How many products to check in this run. Free plans are limited to 25. |

### 📊 Data table

| Field | Type | Description |
| --- | --- | --- |
| `productId`, `sku`, `title`, `brand`, `url` | string | Product number, name, brand and store page. |
| `price`, `currency` | number, string | Current price in Mexican pesos. |
| `listPrice`, `discountAmount`, `discountPercent`, `onSale` | number, boolean | Regular price shown by the store and the discount against it. |
| `promotions` | array | Offer labels such as 2 X 1, 3 X 2 or Oferta. |
| `availability`, `inStock` | string, boolean | Whether the product is listed as available to order online (full product pages). |
| `activeIngredient`, `activeIngredients` | string, array | Active ingredients named on the product page. |
| `strength`, `presentation`, `packQuantity`, `packUnit` | string, number | Strength and pack size as written in the product name. |
| `pricePerUnit`, `pricePerUnitUnit` | number, string | Price per tablet, gram, millilitre or piece, when the pack size is stated. |
| `prescriptionRequired` | boolean | True when the product page says a prescription is required. |
| `categorySlug`, `categories`, `categoryPath` | string, array | Where the product sits in the store. |
| `description`, `indications`, `dosageInstructions`, `contraindications`, `legalNotice` | string | Product page texts (full product pages). |
| `recurringPurchasePrice`, `recurringPurchaseDiscountPercent` | number | Subscription price and discount, when the store offers one. |
| `imageUrl`, `images` | string, array | Product images. |
| `changeType`, `changedFields`, `previousPrice`, `previousListPrice`, `priceChange`, `priceChangePercent`, `previousAvailability`, `firstSeenAt`, `changeDetectedAt`, `missingReason` | various | Change tracking fields, present when tracking is on. |
| `source`, `scrapedAt` | string | Which page type was read and when. |

### 🔄 Change tracking

Switch on "Track changes between runs", pick a monitor name and schedule the same input daily or weekly. The first run records a baseline and marks every product **new**. Later runs mark each product **price drop** or **price increase** (with the previous price and the percent change), **back in stock** or **out of stock**, **updated** (regular price, offer or name change), **unchanged** or **removed**. A product is marked removed right away when its page is gone, and otherwise only after two complete runs in which it no longer appears. Turn on "Only save changes" to save and pay for changes only.

### 💰 Pricing

Pricing is pay per product row, with no subscription. Full product pages, price per unit and change tracking are part of the row, with no extra charge. Empty runs cost nothing, and the discount tiers on your Apify plan apply automatically.

### ⭐ Enjoying Farmacias Guadalajara Scraper?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#ECFDF5;border:1px solid #A7F3D0;border-left:5px solid #059669;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#064E3B">Got a price list you can use straight away?</span><br>
<span style="font-size:14px;color:#334155">A rating takes 10 seconds and helps other pharma and retail teams find a reliable Farmacias Guadalajara price feed.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#059669;border:1px solid #A7F3D0;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/farmacias-guadalajara-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ✨ Tips

- **Start with one category.** Copy a category link from the store menu, run 20 products, check the columns, then raise the limit.
- **Compare brand and generic.** Collect a category with full product pages on and sort by price per unit.
- **Catch promotions.** Turn on "On sale only" to list only discounted products.
- **Follow a shortlist.** Paste the product links you care about, switch on change tracking and schedule it daily.

### ❓ FAQ

##### Which products can I collect?

Everything on the public store: medicines, vitamins and supplements, baby care, dermocosmetics, personal care, groceries and home items. Use category links for whole sections or search by product name.

##### Can I get the active ingredient and prescription flag?

Yes, with full product pages. They are returned when the product page states them. Products without that information simply have no value in those columns.

##### Is availability the stock in my local branch?

No. Availability shows whether the store lists the product as available to order online. Branch stock depends on a postal code and is not part of the public pages.

##### What happens if the store does not answer?

The run finishes with a clear message and saves nothing, so you are not charged for rows that were not collected.

### 🔗 Other actors

- [N11 Scraper: Ürün Fiyat, İndirim & Satıcı | Price Intelligence](https://apify.com/getascraper/n11-product-search-intelligence-scraper) ↗ - Track Turkish marketplace prices, discounts and sellers.
- [Skroutz Seller Scraper: Phone, Email, GEMI, Ratings | Σκρουτζ](https://apify.com/getascraper/skroutz-seller-intelligence-scraper) ↗ - Collect Greek marketplace seller profiles and track changes.
- [Buyee Scraper: Yahoo Auctions & Mercari Japan Data](https://apify.com/getascraper/buyee-scraper) ↗ - Collect cross-border marketplace prices, bids and shipping context.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/farmacias-guadalajara-scraper/changelog.md

# Actor input Schema

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

Public links from farmaciasguadalajara.com: a category (for example /farmacia/circulatorio/anticoagulantes), a brand page, an offers page or a single product page. Category links list every product in that category.

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

Words from a product name, brand or active ingredient named in the title, for example paracetamol or protector solar. Every word must appear in the product name. Matching products are read from their product pages.

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

Keep only products from these brands, for example BAYER or CERAVE. Leave empty to keep every brand.

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

Keep products priced at or above this amount in Mexican pesos. Leave empty for no minimum.

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

Keep products priced at or below this amount in Mexican pesos. Leave empty for no maximum.

## `inStockOnly` (type: `boolean`):

Keep only products the store lists as available to order online. This reads each product page, so runs take longer.

## `onSaleOnly` (type: `boolean`):

Keep only products that show a lower price than their regular list price.

## `includeProductDetails` (type: `boolean`):

Adds description, categories, active ingredient, availability, all images, prescription notice, indications and dosage text to category results. Product links and name searches always return the full page data.

## `monitor` (type: `boolean`):

Compares each product with the previous run of the same monitor and labels it new, price drop, price increase, back in stock, out of stock, updated or removed. Reads full product pages so stock changes are caught.

## `monitorName` (type: `string`):

Name that keeps the history of one monitor. Use a different name for each set of links and filters you track.

## `onlyChanges` (type: `boolean`):

Save only products that are new, changed or removed since the previous run. Unchanged products are skipped and not charged.

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

Highest number of products to check in this run. Free plans are limited to 25.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.farmaciasguadalajara.com/farmacia/circulatorio/anticoagulantes"
    }
  ],
  "searchTerms": [],
  "brands": [],
  "inStockOnly": false,
  "onSaleOnly": false,
  "includeProductDetails": false,
  "monitor": false,
  "monitorName": "default",
  "onlyChanges": false,
  "maxItems": 20
}
```

# Actor output Schema

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

No description

## `runSummary` (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 = {
    "startUrls": [
        {
            "url": "https://www.farmaciasguadalajara.com/farmacia/circulatorio/anticoagulantes"
        }
    ],
    "searchTerms": [],
    "brands": [],
    "inStockOnly": false,
    "onSaleOnly": false,
    "includeProductDetails": false,
    "monitor": false,
    "monitorName": "default",
    "onlyChanges": false,
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/farmacias-guadalajara-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 = {
    "startUrls": [{ "url": "https://www.farmaciasguadalajara.com/farmacia/circulatorio/anticoagulantes" }],
    "searchTerms": [],
    "brands": [],
    "inStockOnly": False,
    "onSaleOnly": False,
    "includeProductDetails": False,
    "monitor": False,
    "monitorName": "default",
    "onlyChanges": False,
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/farmacias-guadalajara-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 '{
  "startUrls": [
    {
      "url": "https://www.farmaciasguadalajara.com/farmacia/circulatorio/anticoagulantes"
    }
  ],
  "searchTerms": [],
  "brands": [],
  "inStockOnly": false,
  "onSaleOnly": false,
  "includeProductDetails": false,
  "monitor": false,
  "monitorName": "default",
  "onlyChanges": false,
  "maxItems": 20
}' |
apify call getascraper/farmacias-guadalajara-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/farmacias-guadalajara-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/uhm8YCFB0F6LSRhpx/builds/G97OYFcY7hBuBRhXY/openapi.json
