{
  "openapi": "3.0.1",
  "info": {
    "title": "G2 Reviews Scraper: Reliable, Pay Only for Results",
    "description": "Collect G2 software reviews without the failed runs other scrapers hit - star ratings, pros & cons, problems solved, reviewer details, as clean JSON/CSV/Excel. Pay only for reviews you get; empty runs are free. Optional AI summaries with your own ChatGPT or Claude key. From $1/1,000.",
    "version": "0.1",
    "x-build-id": "EypohbZl4lX4mcUoA"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~g2-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-g2-reviews-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/automation_craft~g2-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-g2-reviews-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/automation_craft~g2-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-g2-reviews-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": [
          "productUrls"
        ],
        "properties": {
          "productUrls": {
            "title": "G2 products",
            "type": "array",
            "description": "The products you want reviews for. Paste a G2 link (like https://www.g2.com/products/slack/reviews), or just the product's short name from its G2 web address (like 'slack' or 'hubspot-marketing-hub'). Add as many as you want. If you're not sure of the exact name, we'll find the closest matching product for you.",
            "items": {
              "type": "string"
            }
          },
          "source": {
            "title": "Which reviews to collect",
            "enum": [
              "rss",
              "auto",
              "historical"
            ],
            "type": "string",
            "description": "'Latest reviews' (default) is the fastest and most reliable — it gets recent reviews straight from G2. 'Latest + archive' also pulls older reviews and extra details from a review archive (more reviews, a little slower). 'Archive only' focuses on older reviews.",
            "default": "rss"
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "The most reviews to collect for each product. You typically get up to ~125 recent reviews per product, plus older ones from the archive.",
            "default": 100
          },
          "minRating": {
            "title": "Lowest star rating to keep",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Only keep reviews rated at least this many stars (1 to 5).",
            "default": 1
          },
          "maxRating": {
            "title": "Highest star rating to keep",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Only keep reviews rated at most this many stars (1 to 5). Tip: set both the lowest and highest to the same number to get just that rating — for example, set both to 1 to read only the 1-star complaints.",
            "default": 5
          },
          "includeHistorical": {
            "title": "Also include older reviews from the archive",
            "type": "boolean",
            "description": "When using 'Latest + archive', this also pulls older reviews and extra details from the archive. Turn it off for the fastest possible run.",
            "default": true
          },
          "historicalFromYear": {
            "title": "Archive: earliest year",
            "minimum": 2012,
            "maximum": 2030,
            "type": "integer",
            "description": "Optional. Only include archived reviews from this year onward (for example, 2024)."
          },
          "aiTasks": {
            "title": "Optional AI analysis (uses your own key)",
            "type": "array",
            "description": "Add AI analysis using your own ChatGPT or Claude key. 'Review sentiment' tags each review as positive, negative, neutral, or mixed and pulls out key themes. 'Product summary' gives you one report per product with the top complaints, most-requested features, quick wins, and competitors that reviewers mention.",
            "items": {
              "type": "string",
              "enum": [
                "sentiment",
                "productSummary"
              ],
              "enumTitles": [
                "Review sentiment (per review)",
                "Product summary (per product)"
              ]
            },
            "default": []
          },
          "aiProvider": {
            "title": "AI service",
            "enum": [
              "openai",
              "anthropic"
            ],
            "type": "string",
            "description": "Which AI service your key is for — OpenAI (ChatGPT) or Anthropic (Claude). Only needed if you turned on AI analysis above.",
            "default": "openai"
          },
          "aiModel": {
            "title": "AI model",
            "type": "string",
            "description": "Which AI model to use. Leave blank for a fast, low-cost default. You can enter any model your key supports — for example gpt-4o-mini, claude-haiku-4-5, claude-sonnet-5, or claude-fable-5."
          },
          "aiApiKey": {
            "title": "Your AI key",
            "type": "string",
            "description": "Your own OpenAI (ChatGPT) or Anthropic (Claude) API key. It's used only for the AI analysis you selected. Your AI provider bills you directly for that usage — this scraper does not charge you for AI tokens. Your key is stored securely and never shared."
          },
          "maxAiReviews": {
            "title": "Max reviews to run sentiment on (per product)",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Caps how many reviews per product get individual sentiment tagging, so your AI costs stay predictable. The product summary always reads up to 60 reviews in a single pass.",
            "default": 40
          },
          "proxyConfiguration": {
            "title": "Network settings",
            "type": "object",
            "description": "Advanced. The defaults work well — most people can leave this as-is.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "BUYPROXIES94952"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}