{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram Hashtag Scraper",
    "description": "Scrape public Instagram reels by hashtag or keyword, no login or cookies. Get plays, likes, comments, caption, creator, location and music. Filter by date, engagement and followers; find top creators and new reels each run. JSON for trend tracking and influencer discovery.",
    "version": "1.0",
    "x-build-id": "dw1ZoEVGbCG6HvA85"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/data_wiki~instagram-hashtag-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-data_wiki-instagram-hashtag-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/data_wiki~instagram-hashtag-scraper/runs": {
      "post": {
        "operationId": "runs-sync-data_wiki-instagram-hashtag-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/data_wiki~instagram-hashtag-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-data_wiki-instagram-hashtag-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": [
          "urls"
        ],
        "properties": {
          "urls": {
            "title": "🔗 Hashtags, keywords or links",
            "minItems": 1,
            "type": "array",
            "description": "One entry per line. Use a #hashtag (travel), a keyword or phrase (new york), or a link such as https://www.instagram.com/explore/tags/travel/.",
            "items": {
              "type": "string"
            }
          },
          "hashtags": {
            "title": "🔖 Extra hashtags",
            "type": "array",
            "description": "Optional. More hashtags, with or without the # sign. Each entry is one search term.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "💡 Extra keywords",
            "type": "array",
            "description": "Optional. More keywords or multi-word phrases such as 'new york'. Each entry is one search term.",
            "items": {
              "type": "string"
            }
          },
          "resultsLimit": {
            "title": "🎬 Reels per search term",
            "minimum": 1,
            "type": "integer",
            "description": "How many reels to keep for each hashtag or keyword. Instagram offers about 60 reels per term to visitors who are not logged in.",
            "default": 10
          },
          "maxItems": {
            "title": "🧮 Maximum reels in total",
            "minimum": 1,
            "type": "integer",
            "description": "Stop the whole run after this many reels. Leave empty for no total cap."
          },
          "expandRelated": {
            "title": "🌱 Related keywords to add",
            "minimum": 0,
            "type": "integer",
            "description": "0 = off. A number N also searches up to N related keywords that Instagram suggests for each term, for deeper coverage.",
            "default": 0
          },
          "sortBy": {
            "title": "📊 Order of results",
            "enum": [
              "feed",
              "engagement",
              "plays",
              "recent"
            ],
            "type": "string",
            "description": "Feed keeps Instagram's own order and saves reels live as they are found. The other orders look at up to three times the reels per term, rank them, and then save the best ones.",
            "default": "feed"
          },
          "contentType": {
            "title": "🎥 Content type",
            "type": "string",
            "description": "Public hashtag pages list reels only.",
            "default": "reels"
          },
          "postedAfter": {
            "title": "📅 Posted after",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
            "type": "string",
            "description": "Keep only reels posted after this date. Use YYYY-MM-DD or a relative value such as '7 days'."
          },
          "postedBefore": {
            "title": "⏳ Posted before",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
            "type": "string",
            "description": "Keep only reels posted before this date. Use YYYY-MM-DD or a relative value such as '30 days'."
          },
          "minPlays": {
            "title": "🔼 Minimum plays",
            "minimum": 0,
            "type": "integer",
            "description": "Keep reels with at least this many plays."
          },
          "maxPlays": {
            "title": "🔽 Maximum plays",
            "minimum": 0,
            "type": "integer",
            "description": "Keep reels with at most this many plays."
          },
          "minLikes": {
            "title": "💖 Minimum likes",
            "minimum": 0,
            "type": "integer",
            "description": "Keep reels with at least this many likes."
          },
          "maxLikes": {
            "title": "💔 Maximum likes",
            "minimum": 0,
            "type": "integer",
            "description": "Keep reels with at most this many likes."
          },
          "minComments": {
            "title": "💬 Minimum comments",
            "minimum": 0,
            "type": "integer",
            "description": "Keep reels with at least this many comments."
          },
          "minFollowers": {
            "title": "👥 Minimum creator followers",
            "minimum": 0,
            "type": "integer",
            "description": "Keep reels from creators with at least this many followers. Creator stats are collected automatically."
          },
          "maxFollowers": {
            "title": "🌟 Maximum creator followers",
            "minimum": 0,
            "type": "integer",
            "description": "Keep reels from creators with at most this many followers, handy for finding small creators. Creator stats are collected automatically."
          },
          "minEngagementRate": {
            "title": "📈 Minimum engagement rate (%)",
            "minimum": 0,
            "type": "number",
            "description": "Keep reels whose (likes + comments) / followers is at least this percentage. Creator stats are collected automatically."
          },
          "mustIncludeHashtags": {
            "title": "✅ Must include hashtags",
            "type": "array",
            "description": "A reel is kept only if its caption has all of these hashtags.",
            "items": {
              "type": "string"
            }
          },
          "anyOfHashtags": {
            "title": "🎲 Any of these hashtags",
            "type": "array",
            "description": "A reel is kept if its caption has at least one of these hashtags.",
            "items": {
              "type": "string"
            }
          },
          "excludeHashtags": {
            "title": "🚫 Exclude hashtags",
            "type": "array",
            "description": "Drop reels whose caption has any of these hashtags.",
            "items": {
              "type": "string"
            }
          },
          "includeKeywords": {
            "title": "🔍 Caption must contain",
            "type": "array",
            "description": "Keep reels whose caption contains at least one of these words.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "🙈 Caption must not contain",
            "type": "array",
            "description": "Drop reels whose caption contains any of these words.",
            "items": {
              "type": "string"
            }
          },
          "excludeOwners": {
            "title": "🙅 Exclude creators",
            "type": "array",
            "description": "Drop reels posted by these usernames.",
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "title": "🌍 Caption languages",
            "type": "array",
            "description": "Keep reels whose caption language is one of these codes, for example en, es, pt, fr, de, ar, ru.",
            "items": {
              "type": "string"
            }
          },
          "onlyVerified": {
            "title": "🔵 Verified creators only",
            "type": "boolean",
            "description": "Keep only reels from verified accounts.",
            "default": false
          },
          "onlySponsored": {
            "title": "🤝 Sponsored reels only",
            "type": "boolean",
            "description": "Keep only paid partnerships and reels with ad hashtags. Cannot be combined with 'Hide sponsored reels'.",
            "default": false
          },
          "excludeSponsored": {
            "title": "🛑 Hide sponsored reels",
            "type": "boolean",
            "description": "Drop paid partnerships and reels with ad hashtags.",
            "default": false
          },
          "onlyWithLocation": {
            "title": "📍 Only reels with a location",
            "type": "boolean",
            "description": "Keep only reels that have a tagged place.",
            "default": false
          },
          "enrichDetails": {
            "title": "🔬 Likes, comments, date, place & music",
            "type": "boolean",
            "description": "Adds the number of likes and comments, the posting date, the tagged place, music and tagged users to every reel. Takes one extra request per reel. Filters and sorting that need these values switch it on automatically.",
            "default": true
          },
          "enrichOwners": {
            "title": "👑 Creator stats",
            "type": "boolean",
            "description": "Adds followers, following, posts count, bio and link of each creator. Takes one extra request per creator.",
            "default": false
          },
          "extractContacts": {
            "title": "📧 Emails & links in captions",
            "type": "boolean",
            "description": "Lists the email addresses and web links written in each caption.",
            "default": true
          },
          "includeDescription": {
            "title": "🧠 Instagram's summary of the term",
            "type": "boolean",
            "description": "Adds the short description Instagram shows for each term to the search-terms table.",
            "default": true
          },
          "includeVolume": {
            "title": "📚 Total posts for the term",
            "type": "boolean",
            "description": "Adds the total number of posts Instagram reports for each term to the search-terms table.",
            "default": true
          },
          "incremental": {
            "title": "🔔 Only new reels since last run",
            "type": "boolean",
            "description": "Skips reels already returned by earlier runs that used the same monitoring name. Handy for scheduled tracking.",
            "default": false
          },
          "incrementalKey": {
            "title": "📛 Monitoring name",
            "type": "string",
            "description": "Runs that share this name share their memory of seen reels.",
            "default": "default"
          },
          "maxScanned": {
            "title": "🧪 Maximum reels to check",
            "minimum": 1,
            "type": "integer",
            "description": "Safety limit: when filters reject most reels, the run stops once this many reels have been checked in total. The check happens after each search term finishes.",
            "default": 5000
          },
          "requestDelay": {
            "title": "🐢 Pause between pages (seconds)",
            "minimum": 0,
            "maximum": 30,
            "type": "number",
            "description": "Wait between result pages of the same term.",
            "default": 1
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "Choose how requests are routed. If a request is blocked, the Actor switches to another connection automatically.",
            "default": {
              "useApifyProxy": 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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}