# Apollo Pharmacy Keyword Rank Tracker (`ikmal_suzali_atr/apollo-rank`) Actor

Full Apollo Pharmacy (apollopharmacy.in) search results per keyword (top 200) with position, price, MRP, discount and stock: see where a brand ranks. No ratings or reliable sponsored signal on listings.

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

## Pricing

from $4.00 / 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 Keyword Rank Tracker

Captures the Apollo Pharmacy (apollopharmacy.in, India) search results slate for each keyword, with the rank of every product plus price, MRP, discount, pack size and stock. Use it to see where a medicine, supplement or personal-care brand ranks on the terms shoppers type, and how the competing set around it is priced.

### What you get

- One row per search result position: `keyword`, `page`, `position`, `id`, `sku`, `name`, `brand`, `price`, `original_price` (the MRP), `discount_percent` and `product_url`.
- `total_results` for the keyword, so share of search has a denominator.
- `in_stock`, so results Apollo cannot fulfil are visible rather than missing.
- `rx_required`, separating prescription results from over-the-counter ones.
- `unit_size` for the pack size and `subcategory` for Apollo's own shelf label.
- `merchandising_text` and `tags` for the promotional copy on the tile.
- An optional delivery pincode that reorders results and updates delivery text.

### Input

Give the keywords to rank. Everything else has a working default.

```json
{
  "keywords": ["dolo", "vitamin c"],
  "locale": "in",
  "pincode": "122002",
  "pages": 1,
  "delayMs": 1200,
  "callsPerSession": 60,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IN"
  }
}
```

- `keywords` (required): search terms to rank. Duplicates are ignored.
- `pincode`: optional. It reorders results and changes delivery text. Leave it empty for the national view.
- `pages`: result pages to capture per keyword. Apollo serves 24 results a page.
- `delayMs` and `callsPerSession`: pacing and session rotation.
- `proxyConfiguration`: egress for the run. An Indian residential proxy is the default.

### Output

One dataset row per search result position.

```json
{
  "platform": "apollo",
  "locale": "in",
  "keyword": "dolo",
  "page": 1,
  "position": 1,
  "id": "1108",
  "sku": "APD0031",
  "name": "Dolo 650mg Tablet",
  "brand": "Micro Labs",
  "price": 30.9,
  "original_price": 34.5,
  "discount_percent": 10,
  "currency": "INR",
  "rating": null,
  "rating_count": null,
  "in_stock": true,
  "is_sponsored": false,
  "rx_required": false,
  "unit_size": "strip of 15 tablets",
  "total_results": 62,
  "product_url": "https://www.apollopharmacy.in/otc/dolo-650mg-tablet",
  "captured_at": "2026-09-12T03:35:09.757Z"
}
```

`rating` and `rating_count` are always null: Apollo does not publish ratings on search results. `seller` is always null. Apollo has no reliable sponsored marker, so treat `is_sponsored` as unavailable rather than as a measured ad flag.

### Use cases

- Rank tracking for a molecule or brand across a keyword set, from `keyword` and `position`.
- Share of search on priority terms, counting your `brand` against `total_results`.
- Competitive price benchmarking at rank, pairing `position` with `price` and `discount_percent`.
- Availability checks on high-intent keywords using `in_stock`.
- Prescription versus over-the-counter mix behind a search term, from `rx_required`.

### Notes and limits

- 24 results a page.
- Apollo's search never reports more than 200 matches for a keyword, so a term's ranked slate tops out around 200 positions no matter how many pages you ask for.
- `pages` is capped at 10 per keyword, which is already beyond the 200-result ceiling.
- Apollo publishes no ratings and no dependable sponsored signal on search results. Ad-slot share cannot be measured on this storefront.
- Only the India storefront exists.
- An Indian residential proxy is the default and is recommended.

### FAQ

**Do I need a proxy?** An Indian residential proxy is recommended and is the actor default. Search itself answers from other egress, but an Indian exit is the tested configuration.

**How many results can I get?** 24 results a page, with Apollo's own ceiling of 200 matches per keyword. Beyond that the search service simply stops reporting more.

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

**Can I see which results are ads?** No. Apollo does not publish a dependable paid-placement marker, so `is_sponsored` should not be read as an ad flag.

**Does the pincode change the ranks?** It reorders results and updates the delivery text. It does not switch you to a different catalogue.

# Actor input Schema

## `keywords` (type: `array`):

Search keywords to rank. Duplicates are ignored.

## `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.

## `pages` (type: `integer`):

Result pages to capture per keyword. Leave at 0 to capture every result page; the run stops as soon as the results end.

## `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
{
  "keywords": [
    "dolo"
  ],
  "locale": "in",
  "pages": 0,
  "delayMs": 1200,
  "callsPerSession": 60,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

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

One row per search result position.

## `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 = {
    "keywords": [
        "dolo"
    ],
    "pages": 0
};

// Run the Actor and wait for it to finish
const run = await client.actor("ikmal_suzali_atr/apollo-rank").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 = {
    "keywords": ["dolo"],
    "pages": 0,
}

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

```

## MCP server setup

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

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/8wzltqRW29oqk8UKK/builds/9ikgjmR8etdqKcMup/openapi.json
