{
  "openapi": "3.0.1",
  "info": {
    "title": "IndiaMART Phone Number Scraper",
    "description": "Indiamart phone number scraper returns, for every phone number found on IndiaMART: phone number in international and national format, country code, line type, mobile flag, WhatsApp-capable flag, carrier, region, timezone, company name, domain, country, page title, source URL and date found",
    "version": "2.0",
    "x-build-id": "aAxlPAoGNSh3sKQ5h"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/premiumscraper~indiamart-phone-number-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-premiumscraper-indiamart-phone-number-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/premiumscraper~indiamart-phone-number-scraper/runs": {
      "post": {
        "operationId": "runs-sync-premiumscraper-indiamart-phone-number-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/premiumscraper~indiamart-phone-number-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-premiumscraper-indiamart-phone-number-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "keywords"
        ],
        "properties": {
          "keywords": {
            "title": "Keywords (what business do you want?)",
            "minItems": 1,
            "type": "array",
            "description": "Type the PRODUCT you want to source - industrial valves, led lights, corrugated boxes. Adding 'manufacturer' or 'supplier' narrows it further. One line per keyword. Related keywords are searched automatically, so keep each line short. Examples: industrial valves, textile machinery, packaging supplier, led lights. TIP: give SEVERAL keywords, one per line - each one finds a different set of companies, so three keywords return far more contacts than one.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Location (one only)",
            "type": "string",
            "description": "One town, city, area or postcode. Leave empty to search the whole country. SPELLING MATTERS: the location is searched exactly as written, so a misspelt place returns nothing at all rather than fewer results - there is no place list behind this box, so nothing will correct it for you. Use the spelling local businesses use on their own pages. ⚠️ Country, number code and location must all be the SAME country. They are combined in one search, not offered as alternatives - a location or a number code from a different country than the one selected returns few results or none, and there is no guarantee of any. ⚠️ ONE PLACE OR ONE POSTCODE — NEVER BOTH. This box is searched exactly as you type it, as a single phrase. \"Dhaka 1207\" is not searched as \"Dhaka\" and as \"1207\"; it is searched as the words \"Dhaka 1207\", and almost no page prints a town and its postcode side by side, so you will get very little. To cover both, run the actor twice — the town on one run, the postcode on the other.",
            "default": ""
          },
          "dialCodes": {
            "title": "📞 Number codes to search for (optional)",
            "type": "array",
            "description": "Dialling codes, area codes or mobile prefixes to hunt for, written the way pages in your market print them - \"+39\", \"02\", \"347\", \"0161\". Each one you add is searched alongside the contact words, so the more you give the more numbers come back. ⚠️ THEY MUST BELONG TO THE COUNTRY YOU SELECTED ABOVE. A US area code on an Italian search finds nothing at all - the two are combined, not offered as alternatives. Country, number code and location must all be the same country. Leave this empty and the search runs on the contact words alone, which is how it works for every country. Adding codes narrows it; it never widens it.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "How many phone numbers per keyword?",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How many to collect FOR EACH KEYWORD you typed - not for the whole run. Two keywords at 20 gives you up to 40. Start small to see what a site returns, then raise it. TO GET MORE, ADD MORE KEYWORDS - vary them (plumber, emergency plumber, boiler repair). Each one reaches a different set of companies, so three keywords at 50 beats one keyword at 150.",
            "default": 20
          },
          "dateRange": {
            "title": "🕒 Only pages from this period",
            "enum": [
              "any",
              "hour",
              "day",
              "week",
              "month",
              "year",
              "custom"
            ],
            "type": "string",
            "description": "Filters on the date the search last indexed the page, which is a good network for 'this business is still trading'.",
            "default": "any"
          },
          "phoneLineTypes": {
            "title": "Line types to keep",
            "type": "array",
            "description": "Leave 'All types' selected to keep every number the actor finds - mobile, fixed line, VoIP, toll-free and the ones the carrier does not disclose. Pick specific types only if you want to narrow it: 'Mobile' alone gives you an SMS- and WhatsApp-ready list and drops office landlines.",
            "items": {
              "type": "string",
              "enum": [
                "all",
                "mobile",
                "fixed_line",
                "fixed_line_or_mobile",
                "toll_free",
                "voip",
                "premium_rate",
                "shared_cost",
                "unknown"
              ],
              "enumTitles": [
                "All types — every number (recommended)",
                "Mobile — best for WhatsApp and SMS",
                "Fixed line — offices and shops",
                "Fixed line or mobile — cannot be told apart (US/Canada)",
                "Toll free — 0800, 1800",
                "VoIP — internet numbers",
                "Premium rate — expensive to call",
                "Shared cost",
                "Unknown"
              ]
            },
            "default": [
              "all"
            ]
          },
          "whatsappOnly": {
            "title": "💲 Only numbers found in a WhatsApp or chat link",
            "type": "boolean",
            "description": "COSTS EXTRA — only on a row where a WhatsApp number was really found. Keeps only numbers taken out of a wa.me or click-to-chat link. The number is inside the link, so there is no guessing at all. Needs 'Open the result pages' switched on, because these links live on the page, not in the search's result text. The base price per contact does not change; a small extra is ADDED to that row only. Nothing extra is charged when the check cannot run, and turning the switch on costs nothing by itself.",
            "default": false
          },
          "businessSignals": {
            "title": "📣 Commercial-intent signals (best filter for phone numbers)",
            "type": "array",
            "description": "THE strongest filter in this actor for phone hunting. A page that says 'emergency', '24 hour', 'free quote' or 'call us today' is a page that WANTS to be phoned, so it prints the number in plain text instead of hiding it in an image or a contact form. These words sit right next to the number, which also drags the number into the search's result summary — so you often get the phone without opening the page at all. **Do not stack this with several other narrowing filters.** Each filter you add competes for the same small budget of conditions per search, and past a handful the searches stop matching real pages - you get a near-empty run rather than a precise one. Pick the one or two that matter most and leave the rest empty.",
            "items": {
              "type": "string",
              "enum": [
                "quote",
                "booking",
                "emergency",
                "openness",
                "pricing",
                "reviews"
              ],
              "enumTitles": [
                "Offers a free quote",
                "Takes online bookings",
                "Emergency / 24 hour service",
                "Publishes opening hours",
                "Publishes prices",
                "Shows reviews / testimonials"
              ]
            },
            "default": []
          },
          "visitPages": {
            "title": "Open the result pages for more numbers",
            "type": "boolean",
            "description": "Slower and more expensive, but it reads the whole page instead of just the search's short text, so it finds far more numbers and it is the only way WhatsApp links can be found. Turn this on when quality matters more than speed. **Slowest setting in the actor.** Leaving it off keeps a run to minutes; turning it on opens each result's own pages and can multiply the run time several times over. Worth it only when you need contacts that are not visible in the listing itself.",
            "default": true
          },
          "onlyNewSinceLastRun": {
            "title": "💲 Only give me numbers I have not seen before",
            "type": "boolean",
            "description": "COSTS EXTRA — only on a row cross-run memory proved you have not been given before. Compares against every number this actor has returned before under the memory name below, and saves only the new ones. This is the 'this week's new leads' mode. The base price per contact does not change; a small extra is ADDED to that row only. Nothing extra is charged when the check cannot run, and turning the switch on costs nothing by itself.",
            "default": false
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}