{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Jobs Scraper: Greenhouse, Lever, Workday & 8 more",
    "description": "Scrape job listings from company career pages on 11 ATS (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable…) in one schema: salary per year, skills, remote, new and closed jobs. Export to JSON, CSV or Excel.",
    "version": "0.0",
    "x-build-id": "0rmdCofemMdLDaz4g"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nice_dev~ats-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nice_dev-ats-jobs-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/nice_dev~ats-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nice_dev-ats-jobs-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/nice_dev~ats-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nice_dev-ats-jobs-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": {
          "companies": {
            "title": "Companies",
            "maxItems": 5000,
            "uniqueItems": true,
            "type": "array",
            "description": "Company names, ATS slugs or website domains, one per line (e.g. `stripe`, `ramp`, `spotify`, `notion.so`). The Actor finds which ATS hosts each company (one quick check per ATS, see **ATS platforms**). Force the ATS with a prefix: `greenhouse:airbnb`, `lever:spotify`, `ashby:ramp`, `smartrecruiters:BoschGroup`, `workday:nvidia.wd5/NVIDIAExternalCareerSite`. A career page link works here too, with or without https://. A Workday company is found by name only when it is in our directory: otherwise give its career page link. Max 5 000.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Career page URLs",
            "maxItems": 5000,
            "type": "array",
            "description": "Career pages or job pages of any supported ATS, e.g. `https://job-boards.greenhouse.io/airbnb`, `https://jobs.lever.co/spotify`, `https://jobs.ashbyhq.com/ramp`, `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite`, `https://jobs.smartrecruiters.com/BoschGroup`, `https://bunq.recruitee.com`, `https://apply.workable.com/huggingface`. A job URL returns the whole company board. Workday needs the full URL (tenant + site): the way to read a Workday company that is not in our directory. Max 5 000.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchAllCompanies": {
            "title": "Search all companies in our directory",
            "type": "boolean",
            "description": "Also read the companies of our built-in directory (thousands of career sites found on the public web, filtered by **ATS platforms**, **Only these companies** and **Exclude companies**) and keep the jobs that match your keywords and filters. Use it to find jobs without knowing which companies hire. Capped by **Max companies from the directory**.",
            "default": false
          },
          "maxCompanies": {
            "title": "Max companies from the directory",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "With **Search all companies**: how many directory companies to read, the largest boards first. 0 = the whole directory.",
            "default": 500
          },
          "atsPlatforms": {
            "title": "ATS platforms",
            "uniqueItems": true,
            "type": "array",
            "description": "Only use these ATS: to detect the ATS of a company name, and to pick directory companies. Empty = all eleven.",
            "items": {
              "type": "string",
              "enum": [
                "greenhouse",
                "lever",
                "ashby",
                "workday",
                "smartrecruiters",
                "recruitee",
                "workable",
                "personio",
                "bamboohr",
                "rippling",
                "teamtailor"
              ],
              "enumTitles": [
                "Greenhouse",
                "Lever",
                "Ashby",
                "Workday",
                "SmartRecruiters",
                "Recruitee",
                "Workable",
                "Personio",
                "BambooHR",
                "Rippling",
                "Teamtailor"
              ]
            },
            "default": []
          },
          "query": {
            "title": "Job keyword",
            "maxLength": 200,
            "type": "string",
            "description": "Keep only the jobs whose title (or department / team) contains this word or phrase, e.g. `engineer`, `data scientist` (case and accents ignored). Tick **Search in description too** to also match the description. Empty = all jobs."
          },
          "searchQueries": {
            "title": "More job keywords",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several keywords in one run: a job is kept when it matches ANY of them (and **Job keyword**). Up to 100 here, plus **Job keyword**. Each job is saved once, with the keywords it matched in `matchedKeywords`.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchInDescription": {
            "title": "Search in description too",
            "type": "boolean",
            "description": "Match the keywords against the job description as well as the title. Needs the description: free for Greenhouse, Lever, Ashby, Recruitee, Personio and Teamtailor; for the other ATS it turns **Extract job details** on.",
            "default": false
          },
          "location": {
            "title": "Location",
            "maxLength": 200,
            "type": "string",
            "description": "Keep only the jobs whose location (any of their locations) contains this text, e.g. `London`, `Germany`, `Remote` (case and accents ignored). Empty = everywhere."
          },
          "locations": {
            "title": "More locations",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several locations: a job is kept when it matches ANY of them (and **Location**). Up to 100 here, plus **Location**.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of jobs to save for the whole run (after deduplication and filters). 0 = no limit.",
            "default": 100
          },
          "maxItemsPerQuery": {
            "title": "Max jobs per company",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Cap for EACH company board, so that one big employer cannot use up the whole **Max jobs** budget. 0 = no per-company cap.",
            "default": 0
          },
          "extractDetails": {
            "title": "Extract job details",
            "type": "boolean",
            "description": "Open each job page (1 extra request per job) on the ATS whose job list has no description: Workday (description, exact posting date, country code, extra locations), SmartRecruiters (description, qualifications), Workable (description, requirements, benefits), BambooHR and Rippling. Greenhouse, Lever, Ashby, Recruitee, Personio and Teamtailor always come with the full description. Charged as a job with details (see Pricing).",
            "default": false
          },
          "includeApplicationQuestions": {
            "title": "Application form questions",
            "type": "boolean",
            "description": "Greenhouse, Ashby, Recruitee, Rippling and BambooHR: add the questions of the application form (label, type, required, choices) in `applicationQuestions`, plus the Greenhouse pay ranges. 1 extra request per Greenhouse, Ashby, Rippling or BambooHR job; charged per job that has questions (see Pricing).",
            "default": false
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "both",
              "text",
              "html",
              "none"
            ],
            "type": "string",
            "description": "Which description fields to save: plain text (`description`), the HTML of the ATS (`descriptionHtml`), both, or none (lighter dataset).",
            "default": "both"
          },
          "descriptionMaxLength": {
            "title": "Max description length",
            "minimum": 0,
            "maximum": 32000,
            "type": "integer",
            "description": "Cut the plain-text `description` to this many characters (ending with `…`); `descriptionHtml` is not cut by this setting, only past 200 000 characters. 0 = the full text, up to 32 000 characters.",
            "default": 0
          },
          "includeCompanySummary": {
            "title": "Hiring summary per company",
            "type": "boolean",
            "description": "Also write one summary per company with jobs in the results, counted on the jobs this run delivered (after the filters, Max jobs and Only new jobs; only the open jobs of the whole board are counted before the filters): open jobs, jobs per department, country, workplace type, seniority and contract type, share of remote jobs, jobs posted in the last 7 / 30 days, new and closed since the last run (with **Only new jobs**), salary range. Saved in the key-value store record `COMPANY_SUMMARIES` (linked in the Output tab). Charged per company summary written (see Pricing). If the maximum cost of the run is reached by the jobs, some summaries can be left out; the end message says how many.",
            "default": false
          },
          "enrichEmails": {
            "title": "Company contact e-mails",
            "type": "boolean",
            "description": "For each company whose website is known (the domain you typed in **Companies**, Ashby's company profile, or the company's own careers page linked by Greenhouse / Recruitee), read its contact / about pages and add the public e-mail addresses (`companyEmails`), phone numbers (`companyPhones`) and social links such as LinkedIn (`companySocialLinks`) found there. Charged once per company with at least one e-mail found (see Pricing); phone numbers and social links alone are free.",
            "default": false
          },
          "workplaceTypes": {
            "title": "Workplace type",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only remote, hybrid and / or on-site jobs, read from the ATS field when there is one, otherwise from the location and title (`workplaceType`). Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            },
            "default": []
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Adds Remote to **Workplace type**: alone, it keeps the remote jobs only; with Hybrid or On-site ticked there too, it keeps those as well.",
            "default": false
          },
          "employmentTypes": {
            "title": "Employment type",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only these contract types (normalized from the ATS value, otherwise read in the title, see `employmentType`). Jobs whose type is found neither on their ATS nor in their title are dropped when this list is not empty. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract",
                "temporary",
                "internship",
                "apprenticeship",
                "volunteer"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract / freelance",
                "Temporary",
                "Internship",
                "Apprenticeship",
                "Volunteer"
              ]
            },
            "default": []
          },
          "seniority": {
            "title": "Seniority",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the jobs of these levels, from the ATS experience level when there is one, otherwise from the job title (see `seniority`). Jobs with no level are dropped when this list is not empty. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "junior",
                "mid",
                "senior",
                "lead",
                "manager",
                "director",
                "executive"
              ],
              "enumTitles": [
                "Intern",
                "Junior / entry",
                "Mid-level",
                "Senior",
                "Lead / Staff / Principal",
                "Manager",
                "Director",
                "VP / Executive"
              ]
            },
            "default": []
          },
          "departments": {
            "title": "Departments",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the jobs whose department, team or job function contains one of these words, e.g. `Engineering`, `Sales` (case ignored). Workday gives no department: its jobs are dropped once this list is set. Empty = all.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries",
            "maxItems": 250,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the jobs located in these countries: ISO codes (`US`, `GB`, `DE`) or English names. A job with several locations is kept when one of them matches. Jobs whose country cannot be read are dropped when this list is not empty.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeLocations": {
            "title": "Exclude locations",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the jobs whose every location contains one of these words (case and accents ignored). On Workday, SmartRecruiters, Workable, BambooHR and Rippling, a job whose list entry shows no location is checked on its job page (1 extra request; charged as a filter check only if the job is dropped).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeCompanies": {
            "title": "Only these companies",
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the jobs of companies whose name or slug contains one of these words (case ignored). Most useful with **Search all companies**.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the jobs of companies whose name or slug contains one of these words (e.g. staffing agencies).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "skills": {
            "title": "Skills",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the jobs that name at least one of these skills in the title or description (e.g. `Python`, `Salesforce`, `Kubernetes`; case ignored, whole words). Read from `skills` and the description.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "title": "Posting languages",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the jobs written in these languages, ISO 639-1 codes (`en`, `de`, `fr`…): from the ATS field when there is one, otherwise detected from the description (`language`). Empty = all.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxYearsExperience": {
            "title": "Max years of experience asked",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Keep only the jobs that ask at most this many years of experience (`minYearsExperience`, read from the description); jobs that write no number are kept. On Workday, SmartRecruiters, Workable, BambooHR and Rippling, whose job list has no description, the job page of each job is read for it (1 extra request; charged as a filter check only if the job is dropped). 0 = no limit.",
            "default": 0
          },
          "minOpenJobs": {
            "title": "Companies with at least N open jobs",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Keep only the jobs of companies that have at least this many open jobs on their board (`companyOpenJobs`, counted before your filters). 0 = all companies.",
            "default": 0
          },
          "visaSponsorshipOnly": {
            "title": "Visa sponsorship only",
            "type": "boolean",
            "description": "Keep only the jobs that say they sponsor visas (`visaSponsorship` = true).",
            "default": false
          },
          "onlyWithSalary": {
            "title": "Jobs with a salary only",
            "type": "boolean",
            "description": "Keep only the jobs that show a salary: the pay range of the ATS, or an amount written in the description.",
            "default": false
          },
          "minSalary": {
            "title": "Minimum yearly salary",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Keep only the jobs whose yearly salary (top of the range, hourly / monthly pay converted to a year) reaches this amount in **Salary currency**. Jobs in another currency, or without a salary, are dropped. 0 = no minimum.",
            "default": 0
          },
          "salaryCurrency": {
            "title": "Salary currency",
            "pattern": "^[A-Za-z]{3}$",
            "maxLength": 3,
            "type": "string",
            "description": "Currency of **Minimum yearly salary**, ISO code (`USD`, `EUR`, `GBP`…).",
            "default": "USD"
          },
          "maxSalary": {
            "title": "Maximum yearly salary",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Keep only the jobs whose yearly salary (bottom of the range, converted to a year) is at most this amount in **Salary currency**. Jobs in another currency, or without a salary, are dropped (unless **Keep jobs without a salary**). 0 = no maximum.",
            "default": 0
          },
          "keepJobsWithoutSalary": {
            "title": "Keep jobs without a salary",
            "type": "boolean",
            "description": "With **Minimum yearly salary**: also keep the jobs that publish no salary (only the jobs whose published salary is too low, or in another currency, are dropped).",
            "default": false
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "Only jobs published on or after this date: `2026-09-01`, or a period before now such as `7 days`, `24 hours`, `2 weeks`. The date read is `publishedAt` (Workday without details: the day shown as `Posted N Days Ago`; `30+ Days Ago` counts as 30 days, unless a date bound is more than 30 days ago: then the page of each such job is opened for its exact date, 1 extra request per job, not charged as **Extract job details**). Jobs without a date are dropped."
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "Only jobs published on or before this date (the whole day is included), or older than a period such as `30 days`."
          },
          "updatedAfter": {
            "title": "Updated after",
            "type": "string",
            "description": "Only jobs updated on their ATS on or after this date, or within a period such as `3 days` (`updatedAt`; jobs whose ATS gives no update date are compared on `publishedAt`)."
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the jobs whose title contains one of these whole words (case and accents ignored), e.g. `intern`, `sales`; the description is checked too with **Search in description too**.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyNew": {
            "title": "Only new jobs",
            "type": "boolean",
            "description": "Skip the jobs that a previous run (same **Memory key**) already delivered: they are not saved and not charged. First run = everything is new.",
            "default": false
          },
          "includeClosedJobs": {
            "title": "Report jobs taken down",
            "type": "boolean",
            "description": "With **Only new jobs**: also save, once, each job delivered by a previous run (same **Memory key**, with this box ticked) that is no longer on its company board, with `status` = `closed` and `closedAt`. Charged as a closed job, not as a job. Nothing is reported for a company board the run could not read in full.",
            "default": false
          },
          "includeUpdatedJobs": {
            "title": "Also report updated jobs",
            "type": "boolean",
            "description": "With **Only new jobs**: also save again a job already delivered when its content changed since (title, locations, salary, description, dates...), with `status` = `updated`. Charged as a job.",
            "default": false
          },
          "stateKey": {
            "title": "Memory key",
            "pattern": "^[a-zA-Z0-9_-]{1,64}$",
            "maxLength": 64,
            "type": "string",
            "description": "Name of the memory used by **Only new jobs**. Give each schedule / task its own key (e.g. `fintech-engineers`) so that they do not share their memory. Letters, digits, `-` and `_`.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset the memory",
            "type": "boolean",
            "description": "Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every job again. Untick it afterwards.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Leave empty: the Actor reads the public job APIs directly. Add a proxy if your runs are rate-limited.",
            "default": {
              "useApifyProxy": false
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of requests processed in parallel (all ATS together).",
            "default": 10
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 10,
            "maximum": 5000,
            "type": "integer",
            "description": "Most requests in any 60 seconds, all ATS counted. Lever is always kept at 1 request per second at most. Lower it if the log shows HTTP 429.",
            "default": 600
          },
          "minRequestIntervalMs": {
            "title": "Min delay between requests",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Smallest gap between two requests, in milliseconds. 0 = no gap.",
            "default": 0
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Retries per request before it is marked as failed.",
            "default": 5
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Include debug messages in the run log.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}