{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram Hashtag Scraper with Engagement Rates",
    "description": "Extract posts, likes, comments, captions, and author profiles from any Instagram hashtag. Returns clean JSON with pre-calculated engagement rates $3.00/1K.",
    "version": "1.0",
    "x-build-id": "0T6SQWkDb0flf1NL7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~instagram-hashtag-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-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/khadinakbar~instagram-hashtag-scraper/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-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/khadinakbar~instagram-hashtag-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-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",
        "properties": {
          "hashtags": {
            "title": "Instagram hashtags to scrape",
            "type": "array",
            "description": "Use this field when the user provides one or more Instagram hashtags (with or without the # symbol). Example triggers: 'scrape #fitness posts', 'get posts from the travel hashtag', 'find top creators using #streetphotography'. Accepts a list like [\"fitness\", \"travel\"] or a single hashtag like [\"yoga\"]. Leave empty only if you are using startUrls instead.",
            "items": {
              "type": "string"
            },
            "default": [
              "fitness"
            ]
          },
          "startUrls": {
            "title": "Start URLs (Instagram hashtag page URLs)",
            "type": "array",
            "description": "Alternative to the hashtags field. Use when the user provides full Instagram hashtag URLs like 'https://www.instagram.com/explore/tags/fitness/'. Each URL is parsed to extract the hashtag automatically. You can mix direct hashtag names (via 'hashtags') and URLs (via startUrls) in the same run.",
            "items": {
              "type": "object"
            }
          },
          "maxPostsPerHashtag": {
            "title": "Max posts per hashtag",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of posts to extract per hashtag. Use this when the user says 'get 100 posts', 'find top 50 creators', or 'limit to N results'. Higher values use more credits. Defaults to 50 if not specified.",
            "default": 50
          },
          "postType": {
            "title": "Post type",
            "enum": [
              "TOP",
              "RECENT",
              "BOTH"
            ],
            "type": "string",
            "description": "Which posts to return: TOP (highest engagement, shown on the hashtag explore page), RECENT (newest posts regardless of engagement), or BOTH. Use TOP when user wants 'best performing posts', 'most liked posts', or 'viral content'. Use RECENT when user wants 'latest posts', 'newest content', or real-time monitoring. Defaults to RECENT.",
            "default": "RECENT"
          },
          "fetchAuthorDetails": {
            "title": "Fetch author details (follower count + engagement rate)",
            "type": "boolean",
            "description": "Set to true when the user wants engagement rates, follower counts, or wants to identify influencers and rank creators by engagement. Enables additional API calls per unique author to retrieve their follower count, which is required for computing engagement_rate. Slower but produces richer data. Use this for influencer discovery and lead generation. Defaults to false.",
            "default": false
          },
          "dateFrom": {
            "title": "Filter posts from date (ISO format)",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}",
            "type": "string",
            "description": "Only return posts published on or after this date. Use ISO 8601 format: 'YYYY-MM-DD' (e.g. '2026-01-01') or full datetime '2026-01-01T00:00:00Z'. Use when user says 'posts from last week', 'content since January', or 'recent posts only'. Leave blank for no date filter."
          },
          "minimumLikes": {
            "title": "Minimum likes filter",
            "minimum": 0,
            "type": "integer",
            "description": "Only return posts that have at least this many likes. Use when user says 'viral posts', 'popular content', 'posts with 1000+ likes', or 'high-performing posts'. Set to 0 (default) to return all posts regardless of likes.",
            "default": 0
          },
          "sessionCookies": {
            "title": "Instagram session cookies (required for reliable results)",
            "type": "string",
            "description": "Your Instagram session cookies as a string. Required because Instagram now requires login to view hashtag data. To get your cookies: (1) Log into Instagram in Chrome, (2) Open DevTools → Application → Cookies → instagram.com, (3) Copy the full cookie string. The most important cookies are 'sessionid' and 'csrftoken'. Without cookies, the actor will encounter login walls and return 0 results."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "HTTP proxy settings. Instagram requires residential proxies to avoid blocks. Leave as default to use Apify's residential proxy pool automatically."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}