Drogasil Product Prices Scraper avatar

Drogasil Product Prices Scraper

Pricing

from $1.37 / 1,000 item extracteds

Go to Apify Store
Drogasil Product Prices Scraper

Drogasil Product Prices Scraper

Search Drogasil Brazil and export product SKUs, brands, categories, BRL prices, discounts and stock signals for recurring pharmacy retail snapshots.

Pricing

from $1.37 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Collect Drogasil product prices for Brazilian pharmacy retail analysis. Search the public Drogasil storefront and export one snapshot per unique SKU, including product identity, brand, categories, current and list prices in BRL, discounts and stock signals.

Use it for scheduled assortment research, spreadsheet comparisons and recurring pharmacy price snapshots. This Actor collects anonymous public catalogue data, not patient records, account details, loyalty offers or personalized prices.

Who is this for?

  • Retail analysts comparing pharmacy product assortments and public selling prices.
  • Brand teams checking how their products appear in Drogasil search.
  • Data engineers adding dated Brazilian retail snapshots to a warehouse.

Why use this Actor?

Get typed price records instead of HTML pages. Product identity and batched live pricing come from the storefront's structured data, avoiding a separate product-page download for every SKU. Global deduplication prevents charging twice for the same SKU within a run, even across overlapping searches.

No browser, login or proxy setup is required. The Actor makes sequential requests with a stable request session and conservative pacing, and switches automatically to Apify Proxy (datacenter, then Brazilian residential) if Drogasil blocks the direct connection. If Drogasil blocks a request or changes its response structure, the run fails rather than silently claiming a complete empty catalogue.

Getting started

  1. Open the Input tab.
  2. Enter product names, ingredients or brands in Product searches.
  3. Set Maximum unique products to bound the total run output.
  4. Start the Actor and wait for completion.
  5. Open the Dataset tab and export JSON, CSV or Excel.
{
"searchQueries": ["paracetamol"],
"maxItems": 20
}

Input parameters

FieldDefaultMeaning
searchQueries["paracetamol"]1–10 nonblank strings, each at most 150 characters. Trimmed and processed in order.
maxItems20Global limit of 1–1000 unique product snapshots after deduplication. Zero/unlimited is unsupported.

Drogasil controls relevance, synonyms, sponsored products and ranking. A search is not an exact phrase filter, and a returned product need not contain every search word in its title. Queries are not combined with AND/OR logic. Duplicate trimmed queries are removed; differently cased queries remain separate source searches.

The first query yielding a SKU is retained on its row. When an earlier query fills the global limit, later queries are not visited. There are no explicit-URL, category, brand-filter, postcode or logged-in modes. Unsupported input fields are rejected.

Extracted data

FieldMeaning
skuStable source SKU, returned as text.
name, brandProduct identity; brand can be null.
categoriesSource category names.
categoryPathSource hierarchical category path, or null.
productUrlDrogasil product link without tracking query parameters.
currentPriceAnonymous storefront selling price in BRL, or null if unavailable.
listPriceSource reference/list price in BRL, or null.
discountPercentageSource percentage, not independently recomputed.
currencyAlways BRL.
inStockTrue for a positive source stock signal, false for zero, null for unknown.
stockSignalRaw stock signal; not a guaranteed physical inventory count.
searchQuery, sourceUrlFirst query and search page yielding this SKU.
scrapedAtUTC snapshot timestamp.

Source-unavailable scalar values are null, not invented zeros. Missing entire pricing compositions are treated as an upstream failure. A null price does not mean that a product is free.

Example output

A real source record captured during testing; prices and availability can change:

{
"sku": "117313",
"name": "Pratium Paracetamol 140mg/ml Gotas 15ml",
"brand": "Pratium",
"categories": ["Medicamentos", "Remédios", "Para Dor e Febre"],
"categoryPath": "Medicamentos > Remédios > Para Dor e Febre",
"productUrl": "https://www.drogasil.com.br/pratium-140mg-gotas-frasco-15ml.html",
"currentPrice": 39.98,
"listPrice": 39.98,
"discountPercentage": 0,
"currency": "BRL",
"inStock": true,
"stockSignal": 1,
"searchQuery": "paracetamol",
"sourceUrl": "https://www.drogasil.com.br/search?w=paracetamol",
"scrapedAt": "2026-10-27T07:15:15.330Z"
}

How much does it cost to collect Drogasil product prices?

Pay-per-event billing consists of a $0.005 start fee and a per-product event for each unique SKU snapshot delivered. At the BRONZE tier, the product event is $0.00228 per product. Other plan tiers have different product prices; check the Actor's Pricing tab for your plan.

Unique productsBRONZE event total, including start
1$0.00728
50$0.119
100$0.233

Natural zero-result searches incur only the start fee. Failed requests, rejected rows and duplicate SKUs have no product event. A failed run can retain and charge for products delivered before the failure. Dataset export and platform services follow Apify's applicable plan terms.

Pagination and limits

Collection follows the storefront's numbered search pages and stops at the global unique-product limit or source exhaustion. Up to 30 pages per query are visited; this is not a promise of a complete catalogue. Sponsored rows and repeated SKUs can make source row counts differ from unique dataset counts.

Requests are sequential and paced at least 750 ms apart. Transient network, HTTP 429 and 5xx failures receive at most two retries, with backoff. If Drogasil blocks a request (HTTP 401/403 or a search page without product data), the blocked connection is retired and the run continues on the next identity: direct, two Apify datacenter proxy sessions, then two Brazilian residential proxy sessions. Proxy traffic is included in the per-product price. If every identity is blocked, or on other permanent HTTP errors, redirects, unexpected HTML and GraphQL errors, the run fails with a clear message.

The default run timeout is five minutes. Large or slow searches may need a higher user-selected timeout, but the 30-page and 1000-product limits still apply. Check run status before treating a dataset as complete.

Integrations and recurring snapshots

Use an Apify Schedule to run the same input daily. Append results to a warehouse keyed by sku and scrapedAt, then compute changes downstream. The Actor itself does not maintain history, compare runs or send price-change alerts.

Send the default dataset to Google Sheets, Make, Zapier or your own webhook pipeline through Apify integrations. CSV works well for analyst review; JSON preserves arrays and null values for engineering workflows.

The key-value store also contains RUN_STATS: request count, response bytes, retry count, search pages, source rows scanned, skipped in-store service listings (such as clinical exams, which are not products and have no product price) and unique rows saved. These are work counters, not a billing invoice.

API usage

Store the token in an environment variable, never in shared source code. Start one run and retain its returned run ID and default dataset ID.

curl -X POST \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"searchQueries":["paracetamol"],"maxItems":50}' \
'https://api.apify.com/v2/acts/automation-lab~drogasil-pharmacy-products-prices/runs'

JavaScript with apify-client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/drogasil-pharmacy-products-prices')
.call({ searchQueries: ['paracetamol'], maxItems: 50 });
if (run.status !== 'SUCCEEDED') throw new Error(`Run ${run.id}: ${run.status}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems({ limit: 50 });
console.log(items);

Python with apify-client:

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/drogasil-pharmacy-products-prices').call(
run_input={'searchQueries': ['paracetamol'], 'maxItems': 50})
if run['status'] != 'SUCCEEDED':
raise RuntimeError(f"Run {run['id']}: {run['status']}")
print(client.dataset(run['defaultDatasetId']).list_items(limit=50).items)

MCP integration

Configure Claude Code with the stable Actor-specific selection:

claude mcp add --transport http apify \
'https://mcp.apify.com?tools=automation-lab/drogasil-pharmacy-products-prices'

For Claude Desktop, Cursor, and VS Code with compatible remote MCP support:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/drogasil-pharmacy-products-prices"
}
}
}

Authenticate using your client's supported Apify token flow. Discover actual tool names and argument schemas with tools/list. Actor selection also supplies run and storage helpers; it does not expose exactly one tool. Example prompts: “Collect 20 Drogasil paracetamol price snapshots and show SKU, product name, BRL price and stock signal.” Or: “Export 50 Drogasil vitamina C product snapshots for my spreadsheet.”

Start once, retain the returned run ID and follow that same run. A run ID is metadata, not product data. Server waits may end before the run completes; use bounded polling of the same run (for example 2, 4, 8, then 10 seconds, with a 120-second total deadline). A client timeout is not a reason to launch a duplicate. At the deadline report pending with the run ID; on failure label stored rows as partial.

After success, read bounded dataset pages with explicit offset, limit and fields. For model context, an example consumer budget is 20 rows per page, at most 100 source rows and 64 KiB total UTF-8 content, whichever comes first. Enforce bytes host-side before model injection; disclose omissions and continuation offsets. If the client cannot intercept oversized responses, do not claim a hard byte guarantee. Full exports belong in storage, not an unbounded model response. This consumer budget does not change Actor collection limits.

Legality and responsible use

Prices are anonymous public storefront snapshots, not checkout quotes. Loyalty programmes, CPF discounts, delivery location, subscriptions, Pix and multi-buy offers may differ. This Actor does not calculate personalized, historical or medical recommendations. Search results may include non-medicine retail products.

Use product URLs to verify material decisions. Respect applicable laws, source terms and rate limits. No affiliation with Drogasil is claimed. Do not provide patient information, prescriptions, authentication tokens or personal identifiers as searches.

Diagnostics and privacy

Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL query strings are removed; reports are retained for 30 days. Keep searches non-personal. Normal product results stay in your Apify dataset under your storage settings. No AI model is used at runtime. Drogasil receives the product searches, Apify hosts the run/storage, and private GlitchTip receives sanitized failure diagnostics. Delete datasets and key-value stores through Apify; their retention follows your account settings. There is no cross-run cache or persistent browser session.

Troubleshooting and FAQ

Why did I receive fewer products than requested? The limit is a ceiling, not a minimum. The source can exhaust its results, duplicates are removed and only 30 pages per query are visited.

Why is a result not an exact title match? Drogasil controls its own search relevance and sponsored placements. There is no local exact-phrase filter.

Can I scrape a category or product URL? Not with this Actor. Supply search terms instead; URL inputs are rejected.

What should I do after a blocked or failed run? Read the run log and status. Keep any already-written dataset rows labelled partial. Do not blindly repeat large runs; reduce the test to one query and report the run URL through the Actor's Issues tab if the problem persists.

Does stockSignal mean units on a shelf? No. It is the anonymous storefront's numeric availability signal and can be binary or approximate.

This Actor is deliberately standalone for Drogasil. It does not claim coverage of other Brazilian pharmacies or join their prices. Export its snapshots to your existing retail analysis pipeline for cross-source comparisons.