{
  "openapi": "3.0.1",
  "info": {
    "title": "GitHub Repository Search Scraper: Stars, Topics, Licenses",
    "description": "Search GitHub repositories through the official REST API: filter by language, stars, topic, license and date, or list new trending-like projects. No proxy, no user data, and you pay only for repositories delivered.",
    "version": "1.0",
    "x-build-id": "yD0MtlQUt1pPqnbGp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rowcraft~github-repo-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rowcraft-github-repo-search-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/rowcraft~github-repo-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rowcraft-github-repo-search-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/rowcraft~github-repo-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rowcraft-github-repo-search-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": {
          "queries": {
            "title": "Search queries",
            "type": "array",
            "description": "GitHub search syntax, one query per line, for example `language:python stars:>500 topic:scraping` or `machine learning in:description`. Qualifiers: language, topic, stars, forks, license, created, pushed, user, org, in:name, in:description, in:readme. GitHub returns at most 1,000 repositories per query, and a query can have at most 256 characters including the filters below. Optional in recent mode.",
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "recent"
            ],
            "type": "string",
            "description": "Search: run your queries as they are. Recent (trending-like): add \"created in the last N days\" to every query and sort by stars, which lists the fastest-growing new projects. In recent mode the queries can be empty or just a topic or a language.",
            "default": "search"
          },
          "maxItems": {
            "title": "Maximum repositories",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many repositories are delivered in total, queries are read in order. 0 = everything GitHub serves (up to 1,000 per query). Repositories found by two queries are delivered once.",
            "default": 100
          },
          "language": {
            "title": "Programming language",
            "type": "string",
            "description": "Keep repositories whose main language is this one, for example `Python`, `Rust`, `TypeScript`, `C++` or `Jupyter Notebook`. Leave empty for any language."
          },
          "minStars": {
            "title": "Minimum stars",
            "minimum": 0,
            "type": "integer",
            "description": "Keep repositories with at least this many stars. 0 = no limit.",
            "default": 0
          },
          "topics": {
            "title": "Topics",
            "type": "array",
            "description": "Keep repositories tagged with all of these topics, for example `web-scraping`, `cli`, `machine-learning`. Spaces become hyphens.",
            "items": {
              "type": "string"
            }
          },
          "license": {
            "title": "License",
            "type": "string",
            "description": "Keep repositories under this license, written as GitHub does: `mit`, `apache-2.0`, `gpl-3.0`, `bsd-3-clause`, `mpl-2.0`, `unlicense`. Leave empty for any license."
          },
          "createdAfter": {
            "title": "Created on or after",
            "type": "string",
            "description": "Keep repositories created on or after this date, written YYYY-MM-DD, for example 2026-01-01."
          },
          "pushedAfter": {
            "title": "Updated (pushed) on or after",
            "type": "string",
            "description": "Keep repositories with a code push on or after this date, written YYYY-MM-DD. Finds projects that are still maintained."
          },
          "excludeArchived": {
            "title": "Leave out archived repositories",
            "type": "boolean",
            "description": "Archived repositories are read-only and no longer maintained. On by default.",
            "default": true
          },
          "excludeForks": {
            "title": "Leave out forks",
            "type": "boolean",
            "description": "GitHub already leaves forks out of a search; turn this off to include them. On by default.",
            "default": true
          },
          "sort": {
            "title": "Sort by",
            "enum": [
              "stars",
              "forks",
              "updated",
              "best-match"
            ],
            "type": "string",
            "description": "Order of the results, highest first. Stars is the default. Best match is GitHub's own relevance order for text queries.",
            "default": "stars"
          },
          "recentDays": {
            "title": "Recent mode: last N days",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Only used in recent mode: how many days back. 7 gives the projects of the last week. From 1 to 365.",
            "default": 7
          },
          "recentBy": {
            "title": "Recent mode: counted from",
            "enum": [
              "created",
              "pushed"
            ],
            "type": "string",
            "description": "Only used in recent mode. Created: repositories created in the last N days (new projects). Pushed: repositories with a code push in the last N days (active projects).",
            "default": "created"
          },
          "githubToken": {
            "title": "Your GitHub token (optional)",
            "type": "string",
            "description": "A personal access token of your own GitHub account; no scopes are needed. With it GitHub allows 30 searches a minute and 5,000 detail requests an hour instead of 10 and 60, and the run is faster. Stored encrypted by Apify, sent only to api.github.com, never logged or delivered."
          },
          "fetchDetails": {
            "title": "Add watchers and network count",
            "type": "boolean",
            "description": "Make one more request per delivered repository to add the real number of watchers (`subscribers`) and the fork network size (`networkCount`). Uses GitHub's hourly limit (60 without a token, 5,000 with one); when it runs out, the remaining rows are delivered without these two numbers.",
            "default": false
          },
          "countOnly": {
            "title": "Count only (free check)",
            "type": "boolean",
            "description": "Only count how many rows match your filters and estimate the cost at your price tier. Nothing is delivered and nothing is charged apart from the start event. Turn it off to get the data.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new rows since the last run",
            "type": "boolean",
            "description": "Remember the rows already delivered to you (in a key-value store in your Apify account) and deliver only rows that appeared since the last run with the same state key. The first run delivers everything that matches; later runs cost only the new rows. Ideal for schedules.",
            "default": false
          },
          "stateName": {
            "title": "State name",
            "type": "string",
            "description": "Name of the memory used by \"Only new rows\". Use a different name for each schedule or search (for example `stockholm-python`) so they do not share one memory.",
            "default": "default"
          },
          "notifyUrl": {
            "title": "Notify this URL when the run ends",
            "type": "string",
            "description": "A webhook address that receives one JSON POST with the number of new rows and links to the dataset: a Slack or Discord incoming webhook, a Make, n8n or Zapier catch hook, or your own endpoint. The message is also in the `text` (Slack) and `content` (Discord) fields."
          },
          "notifyWhenEmpty": {
            "title": "Notify also when there are no new rows",
            "type": "boolean",
            "description": "By default the notification is sent only when at least one row was delivered.",
            "default": false
          },
          "requestIntervalMs": {
            "title": "Extra delay between requests (ms)",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "The actor already waits what GitHub's limits require: 6.5 seconds between searches without a token, 2.1 seconds with one. This is a minimum on top of that; leave it at 0 unless you want to be gentler.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}