{
  "openapi": "3.0.1",
  "info": {
    "title": "Company Email Pattern Finder: GitHub Commits + MX Check",
    "description": "Find the email format a company uses (first.last@, flast@, first@…) from public GitHub commits of its organization, with confidence, alternatives, MX and mail provider. Plus GitHub org profile, tech stack and activity. No SMTP probing. $0.03 per domain.",
    "version": "0.1",
    "x-build-id": "hv14dc6CROasfGFWX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/oswaldocarabano~company-email-pattern-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-oswaldocarabano-company-email-pattern-finder",
        "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/oswaldocarabano~company-email-pattern-finder/runs": {
      "post": {
        "operationId": "runs-sync-oswaldocarabano-company-email-pattern-finder",
        "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/oswaldocarabano~company-email-pattern-finder/run-sync": {
      "post": {
        "operationId": "run-sync-oswaldocarabano-company-email-pattern-finder",
        "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": {
          "domains": {
            "title": "Company domains",
            "type": "array",
            "description": "Company domains to analyze, one per line: \"stripe.com\", \"nubank.com.br\". A website URL (\"https://www.stripe.com/jobs\") or any email of the company also works. The actor finds the company's GitHub organization, reads its public commits and returns the email pattern. Personal email domains (gmail.com, outlook.com…) are skipped.",
            "default": [
              "nubank.com.br"
            ],
            "items": {
              "type": "string"
            }
          },
          "githubOrgs": {
            "title": "GitHub organizations (optional)",
            "type": "array",
            "description": "If you already know the GitHub organization, give its login (\"stripe\") or URL (\"https://github.com/stripe\"). The company domain is taken from the organization's website or email, or from its commits.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "knownPeople": {
            "title": "People to build emails for (optional)",
            "type": "array",
            "description": "Names of people at these companies, one per line: \"Jane Doe\" (applies to every domain) or \"Jane Doe, stripe.com\". Each row gets their most likely email with the pattern's confidence. Names are only used to build emails and to match commit authors.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "githubToken": {
            "title": "GitHub token (optional, recommended)",
            "type": "string",
            "description": "A GitHub personal access token raises the API limit from 60 requests per hour (about 15 domains) to 5,000 (about 500 domains) and adds language bytes to the tech stack. Create one at github.com/settings/tokens: a fine-grained token with no permissions, or a classic token with no scopes, is enough because only public data is read. It is never logged or stored in the output."
          },
          "commitSource": {
            "title": "Where to read commits",
            "enum": [
              "git",
              "api"
            ],
            "type": "string",
            "description": "Git (default) reads the latest commits with a lightweight git fetch of commit metadata only: no API quota, about 300 commits per repository in a second. API reads 100 commits per request from your API quota.",
            "default": "git"
          },
          "maxReposPerOrg": {
            "title": "Repositories per organization",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many of the organization's most recently updated repositories to read (forks and archived ones are skipped). Measured on 44 companies: 1 repository found a pattern for 32, 3 for 36, 5 for 36, with a median of 3, 15 and 30 matching emails.",
            "default": 5
          },
          "commitsPerRepo": {
            "title": "Commits per repository",
            "minimum": 50,
            "maximum": 3000,
            "type": "integer",
            "description": "Latest commits read from each repository (authors, committers and co-authors).",
            "default": 300
          },
          "includeForks": {
            "title": "Include forked repositories",
            "type": "boolean",
            "description": "Forks mostly contain commits from the original project's authors, not the company's. Off by default.",
            "default": false
          },
          "checkMx": {
            "title": "Check MX records",
            "type": "boolean",
            "description": "Look up the domain's MX records over DNS to confirm it receives email and to identify the mail provider (Google Workspace, Microsoft 365…). No email is ever sent and no mail server is contacted.",
            "default": true
          },
          "includeSamples": {
            "title": "Include evidence emails",
            "type": "boolean",
            "description": "Add the corporate email addresses that support the pattern (name, repository and date of the commit). Off by default: the row then contains only company-level data (pattern, confidence, counts). Turn on only if you have a lawful basis to process these personal data.",
            "default": false
          },
          "evidenceLimit": {
            "title": "Maximum evidence emails per domain",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "With evidence or personal emails turned on, at most this many addresses per domain are listed (all are still counted).",
            "default": 25
          },
          "includePersonalEmails": {
            "title": "Include personal-domain emails",
            "type": "boolean",
            "description": "Also list gmail.com, outlook.com, proton.me… addresses of people who committed to the organization's repositories. They are never used as evidence of the company pattern. Off by default; these are private individuals' addresses.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Domains in parallel",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many domains are processed at the same time. The GitHub API limit is what usually decides the speed, not this number.",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}