# PharmacyChecker Drug Price Scraper (`parseforge/pharmacychecker-scraper`) Actor

Scrapes PharmacyChecker drug price listings by drug name or direct URL. Returns each offer as a flat row with pharmacy name, strength, quantity, unit price, total cost, shipping, and accreditation link.

- **URL**: https://apify.com/parseforge/pharmacychecker-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $11.99 / 1,000 result items

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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### PharmacyChecker Drug Price Scraper

**Scrape drug price listings from PharmacyChecker by drug name or direct URL, up to a million per run.** Each listing includes the pharmacy name, strength, quantity, unit price, total cost, shipping, and accreditation status. Export to CSV, JSON, Excel, or XML.

Comparing prescription drug prices across international and online pharmacies is manual and slow. PharmacyChecker publishes verified price listings, but there is no public API to pull them in bulk. This Actor reads the public drug price pages directly, searching by drug name or scraping a specific URL, and returns each offer in a consistent flat schema.

| Who uses it | What they scrape PharmacyChecker for |
|---|---|
| Healthcare cost analysts | Monitor price differences for a specific medication across accredited pharmacies. |
| Pharmacy benefit managers | Benchmark international drug prices against domestic pharmacy networks. |
| Patient advocacy groups | Build a current database of affordable medication sources for a chronic condition. |
| Academic researchers | Collect longitudinal pricing data to study pharmaceutical market trends. |

### What it does

This Actor collects PharmacyChecker drug price listings by drug name search or direct listing URL, and returns each offer as a flat row with pharmacy, pricing, and accreditation details.

- 🔍 **Drug name search:** provide a list of drug names like 'lipitor' or 'metformin' and the Actor finds all matching price listings.
- 🔗 **Direct URL input:** paste a specific PharmacyChecker drug page URL to scrape only that page's offers.
- ⚙️ **Strength and type filters:** narrow results to a specific strength (e.g. '10+mg') or switch between brand and generic versions.
- 📊 **Sort control:** order the collected listings by cost per unit or total price before they reach your dataset.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with PharmacyChecker data

**💊 Compare generic drug prices.**

A pharmacy benefit manager searches for 'atorvastatin' with the generic filter on, collects 500 listings, and identifies the three lowest-cost accredited pharmacies for a formulary update.

**📈 Track price changes over time.**

A researcher runs the Actor weekly for the same drug name, appends the results to a CSV, and plots unit price trends across pharmacies.

**🔎 Audit a specific listing page.**

A patient advocate pastes a direct PharmacyChecker URL for a high-cost medication, scrapes all offers, and shares the cheapest verified option with their community.

**🌐 Build an international price index.**

A healthcare cost analyst feeds a list of 50 common drug names, collects all listings, and builds a dashboard comparing U.S. retail prices to international pharmacy offers.

### Why choose this scraper

| | What you get |
|---|---|
| **No API key or registration** | Reads the public PharmacyChecker pages directly with no account setup. |
| **Fixed output schema** | Every run returns the same flat fields so your pipeline never breaks. |
| **Bulk collection** | Pull up to a million price listings in a single run. |
| **Flexible input** | Search by drug name or scrape a precise URL you already have. |

### How it compares

This Actor and the other PharmacyChecker scraper on Apify both collect drug price offers, but they differ in input flexibility and filtering options.

| Feature | ParseForge | PharmacyChecker Scraper - Drug Price Offers |
|---|---|---|
| Search by drug name list | Yes | Not listed |
| Direct URL input | Yes | Not listed |
| Filter by drug strength | Yes | Not listed |
| Generic vs. brand toggle | Yes | Not listed |
| Sort by cost per unit or total | Yes | Not listed |
| Pharmacy accreditation links | Yes | Yes |

### Configure the run

Drive the Actor from drug names or a direct PharmacyChecker URL, and apply strength, generic/brand, and sort filters so only the offers you need land in your dataset. The Input tab lists every parameter.

A first run with the defaults:

```json
{
 "drugNames": [
 "lipitor"
 ],
 "maxItems": 10
}
```

A larger pull:

```json
{
 "drugNames": [
 "lipitor"
 ],
 "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.01599 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $1.60 |
| 1,000 results | $15.99 |
| 10,000 results | $159.90 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [PharmacyChecker Drug Price Scraper](https://apify.com/parseforge/pharmacychecker-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to PharmacyChecker through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/pharmacychecker-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that the drug name is spelled correctly and matches a product on PharmacyChecker. If you used a Start URL, verify the page still exists and contains price listings. Also confirm you did not set an overly restrictive strength filter.

**The Actor is collecting fewer listings than my maxItems setting.**

This is normal when PharmacyChecker has fewer total listings for your search than the maximum you set. The Actor stops when it exhausts all available pages.

**My strength filter is being ignored.**

The Strength field only works when you are searching by Drug Names. If you provided a Start URL, the Actor scrapes that exact page without applying the strength filter.

**I got an error about an invalid URL.**

Make sure the Start URL begins with 'https://www.pharmacychecker.com/' and points to a specific drug listing page. Remove any extra parameters or spaces.

**The run timed out before reaching my maxItems.**

Try reducing the Maximum listings count or splitting your drug name list across multiple runs. Very large searches can take time to paginate through all results.

### FAQ

| Question | Answer |
|---|---|
| Do I need a PharmacyChecker account to scrape? | No. The Actor reads the publicly available price listing pages. No login, API key, or registration is required. |
| Can I scrape multiple drugs in one run? | Yes. Use the Drug Names field to provide a list of medications, and the Actor will search and collect listings for each one sequentially. |
| What does the generic drug filter do? | When set to true, the Actor searches for the generic version of the drug name you provided, returning listings for the unbranded equivalent instead of the brand-name product. |
| How do I scrape a specific PharmacyChecker page I already found? | Paste the full URL into the Start URL field. The Actor will scrape only that page and ignore any drug names you entered. |
| What pricing fields are included in the output? | Each row includes the pharmacy name, drug strength, quantity, unit price, total cost, shipping fee, and a link to the pharmacy's accreditation details. |
| Can I filter by a specific drug strength? | Yes. Use the Strength field to enter a value like '10+mg' or '20+mg'. This filter only applies when you are searching by drug name, not a direct URL. |
| How do I sort the results? | Set the Sort By field to 'cost\_per\_unit' to see the lowest unit price first, or 'total' to sort by the full order cost including shipping. |
| Is there a limit to how many listings I can collect? | You can set the Maximum listings field up to 1,000,000 per run. The Actor stops once it reaches that count. |
| What export formats are supported? | You can download your dataset in CSV, JSON, Excel, or XML from the Apify run console. |
| Does this Actor handle pagination on PharmacyChecker? | Yes. When searching by drug name, the Actor automatically follows pagination links to collect listings until it hits your maximum count or runs out of pages. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by PharmacyChecker.com, LLC. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `drugNames` (type: `array`):

List of drug names to search (e.g. 'lipitor', 'metformin'). Use this OR Start URL — not both.

## `startUrl` (type: `string`):

Direct PharmacyChecker drug page URL to scrape (e.g. https://www.pharmacychecker.com/lipitor/10+mg/). Overrides Drug Names if provided.

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

How many drug price listings to collect per run.

## `strength` (type: `string`):

Drug strength to filter by (e.g. '10+mg', '20+mg'). Only used when Drug Names are specified.

## `isGeneric` (type: `boolean`):

Set to true to search for the generic version of the drug instead of brand name.

## `sortBy` (type: `string`):

Sort pricing results by cost per unit or total. Accepted values: 'cost\_per\_unit', 'total'.

## Actor input object example

```json
{
  "drugNames": [
    "lipitor"
  ],
  "maxItems": 10,
  "isGeneric": false
}
```

# Actor output Schema

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

Dataset with all scraped items

# 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 = {
    "drugNames": [
        "lipitor"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/pharmacychecker-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 = {
    "drugNames": ["lipitor"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/pharmacychecker-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 '{
  "drugNames": [
    "lipitor"
  ],
  "maxItems": 10
}' |
apify call parseforge/pharmacychecker-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/pharmacychecker-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/xvFiG7kH9gSW13Ro7/builds/yjr0KlnbaehzoLw5B/openapi.json
