# Apollo Pharmacy Catalogue by Category (`ikmal_suzali_atr/apollo-catalog`) Actor

Every product on an Apollo Pharmacy category listing (apollopharmacy.in): id, name, brand, price, MRP, discount and stock, page by page, optionally with subcategories. No ratings or reliable sponsored signal on listings.

- **URL**: https://apify.com/ikmal\_suzali\_atr/apollo-catalog.md
- **Developed by:** [AtTheRate AI](https://apify.com/ikmal_suzali_atr) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Apollo Pharmacy Catalogue by Category

Pulls every product on an Apollo Pharmacy category listing (apollopharmacy.in, India), page by page, with price, MRP, discount, pack size and stock. Use it to mirror a pharmacy category, track discounting on OTC and supplement ranges, or compare Apollo against other Indian pharmacies.

### What you get

- One row per product: `id`, `sku`, `name`, `brand`, `price`, `original_price` (the MRP), `discount_percent`, `currency` and `product_url`.
- `page` and `position` for exact placement inside the category listing.
- `in_stock`, so out-of-stock lines stay visible rather than missing.
- `rx_required`, separating prescription items from over-the-counter stock.
- `unit_size` for the pack size and `subcategory` for Apollo's own shelf label.
- `merchandising_text` and `tags` for the promotional copy, plus optional subcategory crawling.

### Input

Give one or more category slugs, URLs or names.

```json
{
  "categories": ["apollo-vitamins-supplements"],
  "locale": "in",
  "pincode": "122002",
  "maxPages": 1,
  "expandSubcategories": false,
  "delayMs": 1200,
  "callsPerSession": 60,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IN"
  }
}
```

- `categories` (required): a slug such as `apollo-vitamins-supplements`, a `/shop-by-category/` URL, or a name such as `"Vitamins & Supplements"`. Names resolve from the site navigation.
- `pincode`: optional. It reorders results and changes delivery text. Leave it empty for the national assortment.
- `maxPages`: pages per category. `0` means every page. Apollo serves 24 products a page.
- `expandSubcategories`: also crawl the children of each category.
- `proxyConfiguration`: egress for the run. An Indian residential proxy is the default.

### Output

One dataset row per product per page.

```json
{
  "platform": "apollo",
  "locale": "in",
  "category": "apollo-vitamins-supplements",
  "category_title": "Vitamins & Supplements",
  "page": 1,
  "position": 1,
  "id": "1108",
  "sku": "APD0031",
  "name": "Apollo Life Vitamin C 500mg Tablet",
  "brand": "Apollo Life",
  "price": 135,
  "original_price": 150,
  "discount_percent": 10,
  "currency": "INR",
  "rating": null,
  "rating_count": null,
  "in_stock": true,
  "is_sponsored": false,
  "rx_required": false,
  "unit_size": "bottle of 60 tablets",
  "subcategory": "Vitamins & Supplements",
  "merchandising_text": "Buy 1 Get 1",
  "product_url": "https://www.apollopharmacy.in/otc/apollo-life-vitamin-c-500mg-tablet",
  "fetched_at": "2026-09-12T03:35:09.757Z"
}
```

`rating`, `rating_count` and `seller` are always null: Apollo publishes none of them on listings. Apollo has no reliable sponsored marker either, so treat `is_sponsored` as unavailable rather than as a measured ad flag.

### Use cases

- Price and MRP tracking on OTC and supplement ranges from `price`, `original_price` and `discount_percent`.
- Assortment comparison against other Indian pharmacies, keyed on `name` and `unit_size`.
- Availability monitoring from `in_stock`, with or without a `pincode`.
- Promotion tracking from `merchandising_text`, and prescription versus OTC mix from `rx_required`.

### Notes and limits

- 24 products a page.
- Category slugs come from the site navigation, and a name is matched against it, so a slug or a `/shop-by-category/` URL is the most reliable input.
- An unknown slug returns zero rows for that entry with a warning, and the run goes on.
- Apollo publishes no ratings and no dependable sponsored signal on listings.
- Only the India storefront exists.
- An Indian residential proxy is the default and is recommended. Category names are read from the public site, which only answers Indian egress, so without one you must pass slugs or URLs.

### FAQ

**Do I need a proxy?** An Indian residential proxy is recommended and is the default. Without it you can still scrape by slug or URL, but category names will not resolve.

**How many results can I get?** Everything Apollo lists for the category, 24 products a page. `maxPages` caps it, `0` means no cap.

**Does it need a login or an API key?** No.

**Does the pincode change the assortment?** It reorders results and updates the delivery text. It does not switch you to a different catalogue, so leave it empty for the national view.

**Why are ratings empty?** Apollo returns no ratings on its listing endpoints, so the columns exist for schema consistency and are always null.

# Actor input Schema

## `categories` (type: `array`):

Apollo Pharmacy category slugs, URLs or names, e.g. "apollo-vitamins-supplements", "https://www.apollopharmacy.in/shop-by-category/vitamin-c" or "Vitamins & Supplements" (resolved from the site menu).

## `locale` (type: `string`):

Which storefront / locale.

## `pincode` (type: `string`):

Optional delivery pincode. It only reorders results and changes delivery text; leave empty for the national assortment.

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

0 = all pages.

## `expandSubcategories` (type: `boolean`):

Also crawl each category's subcategories when the site exposes them.

## `delayMs` (type: `integer`):

Pause between page fetches.

## `callsPerSession` (type: `integer`):

Re-mint the session after this many page fetches.

## `proxyConfiguration` (type: `object`):

On the Apify platform this decides egress. A residential proxy in the storefront's country is recommended (IN for the default). On our own servers it is ignored and our residential proxy is used.

## Actor input object example

```json
{
  "categories": [
    "apollo-vitamins-supplements"
  ],
  "locale": "in",
  "maxPages": 0,
  "expandSubcategories": false,
  "delayMs": 1200,
  "callsPerSession": 60,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

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

One row per product.

## `summary` (type: `string`):

Counts for the run: what was requested, captured, skipped and failed.

# 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 = {
    "categories": [
        "apollo-vitamins-supplements"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ikmal_suzali_atr/apollo-catalog").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 = { "categories": ["apollo-vitamins-supplements"] }

# Run the Actor and wait for it to finish
run = client.actor("ikmal_suzali_atr/apollo-catalog").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 '{
  "categories": [
    "apollo-vitamins-supplements"
  ]
}' |
apify call ikmal_suzali_atr/apollo-catalog --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ikmal_suzali_atr/apollo-catalog"
        }
    }
}
```

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/0vztTSWVQOGQQfkFg/builds/G96S96YsAjc6zNpJT/openapi.json
