# CrowdPull GoodRx Drug Prices Scraper

> CrowdPull GoodRx Drug Prices Scraper is a paid API for AI agents from crowdpull.click, paid per call via x402, $0.05/call, status unknown (last checked 2026-09-16).

Scrapes GoodRx public drug price listings by drug name, location, and delivery type to return structured pricing datasets with optional coupons.

## Facts

- Endpoint: POST https://crowdpull.click/api/actors/goodrx-drug-prices-scraper/call
- Price: $0.05/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-16
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/crowdpull-goodrx-drug-prices-scraper-1fc1f932
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_Hfzkn3Uu1-eqLAA1a10SX

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability crowdpull-goodrx-drug-prices-scraper-1fc1f932 -d '<json body>'
```

Example prompt: What are the cheapest GoodRx prices for 30 tablets of metformin 500mg near ZIP 90210, including both pickup and mail options, and show me any available coupons — return up to 25 offers?

## When to prefer this

Use this endpoint when you need structured drug price data from GoodRx specifically — including coupon prices, delivery type filtering (pickup vs mail), and location-based pharmacy offers — and want it delivered as a dataset rather than navigating GoodRx manually. Prefer this over general web scrapers when GoodRx-specific fields like coupons, quantity, and delivery type matter.

## Known failure modes

- Invalid or unsupported drug name returns empty result set
- ZIP code not recognized returns no pharmacy offers
- GoodRx page structure change causes scraper failure
- maxOffersPerDrugZip exceeded or invalid returns validation error
- Job times out before results are ready — poll by job ID
- Payment not processed returns 402 error before job starts

## How this service works

CrowdPull turns public web pages into useful datasets for marketplaces, housing, reviews, jobs, social posts, drug prices, video, and public records.

## Output

Returns a job token and job object with ID and status. The job result set (via resultSetId) contains structured drug price offers from GoodRx including pharmacy names, prices, delivery types, and coupon codes for the queried drug and location.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "input": {
   "type": "object",
   "required": [],
   "properties": {
    "url": {
     "type": "string",
     "description": "Single public URL accepted by the selected source."
    },
    "zip": {
     "type": "string"
    },
    "urls": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Public URLs accepted by the selected source."
    },
    "zips": {
     "type": "array",
     "items": {
      "type": "string"
     }
    },
    "query": {
     "type": "string",
     "description": "Search query or keyword."
    },
    "drugName": {
     "type": "string"
    },
    "location": {
     "type": "string",
     "description": "City, ZIP, state, neighborhood, or source-supported location."
    },
    "maxItems": {
     "type": "integer",
     "default": 25,
     "maximum": 250,
     "minimum": 1
    },
    "quantity": {
     "type": "integer",
     "minimum": 1
    },
    "drugNames": {
     "type": "array",
     "items": {
      "type": "string"
     }
    },
    "startUrls": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Public source URLs to collect from."
    },
    "maxResults": {
     "type": "integer",
     "default": 25,
     "maximum": 250,
     "minimum": 1
    },
    "maxListings": {
     "type": "integer",
     "default": 25,
     "maximum": 250,
     "minimum": 1
    },
    "searchQuery": {
     "type": "string",
     "description": "Search query or keyword."
    },
    "deliveryType": {
     "enum": [
      "pickup",
      "mail",
      "all"
     ],
     "type": "string"
    },
    "includeCoupons": {
     "type": "boolean",
     "default": true
    },
    "includeDetails": {
     "type": "boolean",
     "default": false
    },
    "maxOffersPerDrugZip": {
     "type": "integer",
     "maximum": 50,
     "minimum": 1
    }
   },
   "description": "GoodRx Drug Prices Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
   "additionalProperties": true
  },
  "options": {
   "type": "object",
   "properties": {
    "build": {
     "type": "string",
     "maxLength": 100,
     "minLength": 1
    },
    "memory": {
     "type": "integer",
     "maximum": 8192,
     "minimum": 128
    },
    "waitForFinishSeconds": {
     "type": "integer",
     "default": 10,
     "maximum": 60,
     "minimum": 0
    }
   },
 
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "type": "object",
  "required": [
   "token",
   "job"
  ],
  "properties": {
   "job": {
    "type": "object",
    "required": [
     "id",
     "status"
    ],
    "properties": {
     "id": {
      "type": "string"
     },
     "status": {
      "type": "string"
     },
     "resultSetId": {
      "type": "string"
     }
    },
    "additionalProperties": true
   },
   "token": {
    "type": "string"
   }
  },
  "additionalProperties": false
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/crowdpull-goodrx-drug-prices-scraper-1fc1f932/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from crowdpull.click](https://www.zero.xyz/host/crowdpull.click/llms.txt)
