# Glassdoor Company Data - Search Companies and Get Full Company Profiles > Fast, Reliable, and Searchable Glassdoor Company Data - Search Companies by Name, Website Domain, Industry, Company Type, Headcount Band, Founding Year, Stock Ticker, HQ Country or Description, and Get Full Company Profiles with Ratings, Review Counts, Revenue, Size & Mission. ## Overview Glassdoor Company Data is a search API over Glassdoor company profiles, returning structured JSON via REST. You search it by company name or description, look companies up by website domain, stock ticker or employer ID, or filter by industry, sector, company type, headcount band, founding year and headquarters country. Every filter you send must match, a filter given several values matches any of them, and every query returns the total number of matches, with a cursor that pages through the full result set when more results remain. Who is this API for: developers building lead-generation and prospecting lists, CRM enrichment against a known website domain or stock ticker, and market analysis by industry, headcount band or country. What it returns: company records with name, website, industry, company type, headcount band, founding year, headquarters country, description, revenue, size, mission and logo, the overall rating, review count and review sub-ratings, salary and job counts, and first_seen / last_seen timestamps. A key with no value is omitted rather than returned as null. Need help integrating? Contact support@openwebninja.com. For high volume / large scale plans, please contact support@openwebninja.com. ## Endpoints ### GET /search - Search Search company records by any combination of the field parameters below, and read back one page of results. Parameters: - name (string): The company's name. Full-text match - the value is analyzed, so word order and case do not have to match exactly. Takes exactly one value; repeating the parameter is a 400. **Examples:** `Microsoft` - employer_id (string or array of string): The company's identifier, as it appears on a record's `employer_id`. Accepts a comma separated list (e.g., `1651`, `9079`) or multiple `employer_id` parameters (e.g., `employer_id=1651&employer_id=9079`) of up to 20 values. Exact match on the stored value, byte for byte. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. **Examples:** `1651` `1651,9079` - website_domain (string or array of string): The company's website domain. A URL, a `www.` host or a bare host is accepted, and each is reduced to its bare domain before matching; a value that reduces to nothing is rejected with a 400. Accepts a comma separated list (e.g., `microsoft.com`, `siemens.com`) or multiple `website_domain` parameters (e.g., `website_domain=microsoft.com&website_domain=siemens.com`) of up to 20 values. Exact match on the stored value, regardless of case. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. **Examples:** `microsoft.com` `microsoft.com,siemens.com` - industry (string or array of string): The company's industry, by name. A single value is also matched as analyzed text against the industry name, which finds word-form variants; sending several values matches each of them exactly instead. Accepts multiple `industry` parameters (e.g., `industry=value1&industry=value2`) of up to 20 values. A comma inside a value is part of the value rather than a separator, so the values cannot be comma-separated here; in the JSON body form send them as a list on `POST /search` instead. Exact match on the stored value, regardless of case. **Examples:** `Software Development` - industry_id (string or array of string): The identifier of the company's industry. Accepts a comma separated list (e.g., `200063`, `200064`) or multiple `industry_id` parameters (e.g., `industry_id=200063&industry_id=200064`) of up to 20 values. Exact match on the stored value, byte for byte. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. **Examples:** `200063` `200063,200064` - sector_id (string or array of string): The identifier of the company's sector. Accepts a comma separated list (e.g., `10013`, `10015`) or multiple `sector_id` parameters (e.g., `sector_id=10013§or_id=10015`) of up to 20 values. Exact match on the stored value, byte for byte. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. **Examples:** `10013` `10013,10015` - company_type (string or array of string): The company's type, by its code rather than a display label. Accepts a comma separated list (e.g., `PUBLIC`, `SUBSIDIARY`) or multiple `company_type` parameters (e.g., `company_type=PUBLIC&company_type=SUBSIDIARY`) of up to 20 values. Exact match on the stored value, regardless of case. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. **Examples:** `PUBLIC` `PUBLIC,SUBSIDIARY` - size_category (string or array of string): The company's headcount band, by label: one of `SMALL`, `SMALL_TO_MEDIUM`, `MEDIUM`, `MEDIUM_TO_LARGE`, `LARGE`, `LARGE_TO_GIANT`, `GIANT`. Accepts a comma separated list (e.g., `LARGE`, `LARGE_TO_GIANT`) or multiple `size_category` parameters (e.g., `size_category=LARGE&size_category=LARGE_TO_GIANT`) of up to 20 values. A label matches exactly, case included, and selects the companies in its band. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. **Examples:** `GIANT` `LARGE,LARGE_TO_GIANT,GIANT` - size_category_min (string, allowed: SMALL | SMALL_TO_MEDIUM | MEDIUM | MEDIUM_TO_LARGE | LARGE | LARGE_TO_GIANT | GIANT): The smallest headcount band to match, inclusive, by label. Takes exactly one label, one of `SMALL`, `SMALL_TO_MEDIUM`, `MEDIUM`, `MEDIUM_TO_LARGE`, `LARGE`, `LARGE_TO_GIANT`, `GIANT`. A company with no recorded value for it matches no bound. **Examples:** `MEDIUM` - size_category_max (string, allowed: SMALL | SMALL_TO_MEDIUM | MEDIUM | MEDIUM_TO_LARGE | LARGE | LARGE_TO_GIANT | GIANT): The largest headcount band to match, inclusive, by label. Takes exactly one label, one of `SMALL`, `SMALL_TO_MEDIUM`, `MEDIUM`, `MEDIUM_TO_LARGE`, `LARGE`, `LARGE_TO_GIANT`, `GIANT`. A company with no recorded value for it matches no bound. **Examples:** `LARGE` - year_founded_min (integer): The earliest founding year to match, inclusive. Takes exactly one whole number from -32768 to 32767. A company with no recorded value for it matches no bound. **Examples:** `1950` - year_founded_max (integer): The latest founding year to match, inclusive. Takes exactly one whole number from -32768 to 32767. A company with no recorded value for it matches no bound. **Examples:** `2000` - stock_ticker (string or array of string): The company's stock ticker symbol. Accepts a comma separated list (e.g., `MSFT`, `SIE`) or multiple `stock_ticker` parameters (e.g., `stock_ticker=MSFT&stock_ticker=SIE`) of up to 20 values. Exact match on the stored value, regardless of case. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. **Examples:** `MSFT` `MSFT,SIE` - hq_country (string or array of string): The country of the company's headquarters. Accepts a comma separated list (e.g., `US`, `DE`) or multiple `hq_country` parameters (e.g., `hq_country=US&hq_country=DE`) of up to 20 values. Exact match on the stored value, regardless of case. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. **Examples:** `US` `US,DE` - description (string): The company's description. Full-text match - the value is analyzed, so word order and case do not have to match exactly. Takes exactly one value; repeating the parameter is a 400. **Examples:** `cloud computing` - limit (integer, default: `20`): The most records one page returns - a ceiling rather than a promise, so a page can hold any number up to it. Defaults to 20, and 500 is the most that is accepted. **Allowed values:** `1-500` - cursor (string): The opaque page token returned as `cursor` on the previous page. Send it back verbatim to fetch the next page. It is meaningful only for the exact query that produced it and it expires, so never construct or edit one: a token this API did not issue is rejected with a 400. **Examples:** the `cursor` value of the previous response, sent back unchanged. The response examples on this page show one. - fields (string): Narrow each returned record to the names listed here. Send them as ONE occurrence of this parameter with the names separated by commas, for example `name,rating`; a name listed twice is collapsed rather than refused, while a repeated parameter is a 400. In the JSON body form the value may instead be a list, where each element is exactly one name - a comma inside an element is rejected with a 400 whose `error` is `UNKNOWN_FIELD`. `employer_id` is returned whether or not it is listed. Leaving the parameter out, or sending it blank, returns the whole record. A name this operation does not return is rejected with a 400 whose `error` is `UNKNOWN_FIELD`; the names it does return are this parameter's own accepted values. It narrows the response body and nothing else - the same record is read and assembled either way, so it is neither a latency nor a cost control. **Allowed values:** `employer_id`, `name`, `website_domain`, `industry`, `industry_id`, `sector_id`, `company_type`, `size_category`, `year_founded`, `stock_ticker`, `hq_country`, `description`, `rating`, `review_count`, `website`, `revenue`, `size`, `mission`, `logo_url`, `salary_count`, `job_count`, `business_outlook_rating`, `career_opportunities_rating`, `compensation_and_benefits_rating`, `culture_and_values_rating`, `diversity_and_inclusion_rating`, `recommend_to_friend_rating`, `senior_management_rating`, `work_life_balance_rating`, `first_seen`, `last_seen`, `last_changed` **Examples:** `name,website_domain,rating` `name,size_category,revenue,hq_country` Full URL: `https://api.openwebninja.com/company-database/search` ### POST /search - Search (POST) Search company records by any combination of the field parameters below, sent as a JSON body, and read back one page of results. Parameters: - name (string, e.g. `Microsoft`): The company's name. Full-text match - the value is analyzed, so word order and case do not have to match exactly. Takes exactly one value; repeating the parameter is a 400. - employer_id (string or array of string, e.g. `1651`): The company's identifier, as it appears on a record's `employer_id`. Accepts a comma separated list (e.g., `1651`, `9079`) or a JSON array (e.g., `["1651", "9079"]`) of up to 20 values. Exact match on the stored value, byte for byte. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. - website_domain (string or array of string, e.g. `microsoft.com`): The company's website domain. A URL, a `www.` host or a bare host is accepted, and each is reduced to its bare domain before matching; a value that reduces to nothing is rejected with a 400. Accepts a comma separated list (e.g., `microsoft.com`, `siemens.com`) or a JSON array (e.g., `["microsoft.com", "siemens.com"]`) of up to 20 values. Exact match on the stored value, regardless of case. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. - industry (string or array of string, e.g. `Software Development`): The company's industry, by name. A single value is also matched as analyzed text against the industry name, which finds word-form variants; sending several values matches each of them exactly instead. Accepts a JSON array (e.g., `["value1", "value2"]`) of up to 20 values. A comma inside a value is part of the value rather than a separator, so the values cannot be comma-separated here; in the JSON body form send them as a list on `POST /search` instead. Exact match on the stored value, regardless of case. - industry_id (string or array of string, e.g. `200063`): The identifier of the company's industry. Accepts a comma separated list (e.g., `200063`, `200064`) or a JSON array (e.g., `["200063", "200064"]`) of up to 20 values. Exact match on the stored value, byte for byte. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. - sector_id (string or array of string, e.g. `10013`): The identifier of the company's sector. Accepts a comma separated list (e.g., `10013`, `10015`) or a JSON array (e.g., `["10013", "10015"]`) of up to 20 values. Exact match on the stored value, byte for byte. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. - company_type (string or array of string, e.g. `PUBLIC`): The company's type, by its code rather than a display label. Accepts a comma separated list (e.g., `PUBLIC`, `SUBSIDIARY`) or a JSON array (e.g., `["PUBLIC", "SUBSIDIARY"]`) of up to 20 values. Exact match on the stored value, regardless of case. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. - size_category (string or array of string, e.g. `GIANT`): The company's headcount band, by label: one of `SMALL`, `SMALL_TO_MEDIUM`, `MEDIUM`, `MEDIUM_TO_LARGE`, `LARGE`, `LARGE_TO_GIANT`, `GIANT`. Accepts a comma separated list (e.g., `LARGE`, `LARGE_TO_GIANT`) or a JSON array (e.g., `["LARGE", "LARGE_TO_GIANT"]`) of up to 20 values. A label matches exactly, case included, and selects the companies in its band. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. - size_category_min (string, allowed: SMALL | SMALL_TO_MEDIUM | MEDIUM | MEDIUM_TO_LARGE | LARGE | LARGE_TO_GIANT | GIANT, e.g. `MEDIUM`): The smallest headcount band to match, inclusive, by label. Takes exactly one label, one of `SMALL`, `SMALL_TO_MEDIUM`, `MEDIUM`, `MEDIUM_TO_LARGE`, `LARGE`, `LARGE_TO_GIANT`, `GIANT`. A company with no recorded value for it matches no bound. - size_category_max (string, allowed: SMALL | SMALL_TO_MEDIUM | MEDIUM | MEDIUM_TO_LARGE | LARGE | LARGE_TO_GIANT | GIANT, e.g. `LARGE`): The largest headcount band to match, inclusive, by label. Takes exactly one label, one of `SMALL`, `SMALL_TO_MEDIUM`, `MEDIUM`, `MEDIUM_TO_LARGE`, `LARGE`, `LARGE_TO_GIANT`, `GIANT`. A company with no recorded value for it matches no bound. - year_founded_min (integer, e.g. `1950`): The earliest founding year to match, inclusive. Takes exactly one whole number from -32768 to 32767. A company with no recorded value for it matches no bound. - year_founded_max (integer, e.g. `2000`): The latest founding year to match, inclusive. Takes exactly one whole number from -32768 to 32767. A company with no recorded value for it matches no bound. - stock_ticker (string or array of string, e.g. `MSFT`): The company's stock ticker symbol. Accepts a comma separated list (e.g., `MSFT`, `SIE`) or a JSON array (e.g., `["MSFT", "SIE"]`) of up to 20 values. Exact match on the stored value, regardless of case. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. - hq_country (string or array of string, e.g. `US`): The country of the company's headquarters. Accepts a comma separated list (e.g., `US`, `DE`) or a JSON array (e.g., `["US", "DE"]`) of up to 20 values. Exact match on the stored value, regardless of case. In the JSON body form the value may instead be a list, whose elements may themselves be comma-separated. - description (string, e.g. `cloud computing`): The company's description. Full-text match - the value is analyzed, so word order and case do not have to match exactly. Takes exactly one value; repeating the parameter is a 400. - limit (integer, default: `20`): The most records one page returns - a ceiling rather than a promise, so a page can hold any number up to it. Defaults to 20, and 500 is the most that is accepted. - cursor (string): The opaque page token returned as `cursor` on the previous page. Send it back verbatim to fetch the next page. It is meaningful only for the exact query that produced it and it expires, so never construct or edit one: a token this API did not issue is rejected with a 400. **Examples:** the `cursor` value of the previous response, sent back unchanged. The response examples on this page show one. - fields (string or array of string): Narrow each returned record to the names listed here. Send them as ONE occurrence of this parameter with the names separated by commas, for example `name,rating`; a name listed twice is collapsed rather than refused, while a repeated parameter is a 400. In the JSON body form the value may instead be a list, where each element is exactly one name - a comma inside an element is rejected with a 400 whose `error` is `UNKNOWN_FIELD`. `employer_id` is returned whether or not it is listed. Leaving the parameter out, or sending it blank, returns the whole record. A name this operation does not return is rejected with a 400 whose `error` is `UNKNOWN_FIELD`; the names it does return are this parameter's own accepted values. It narrows the response body and nothing else - the same record is read and assembled either way, so it is neither a latency nor a cost control. **Examples:** `["name", "website_domain", "rating"]` Full URL: `https://api.openwebninja.com/company-database/search` ## Base URL and Authentication - Base URL: `https://api.openwebninja.com/company-database` - Auth: API key in the `x-api-key` header. Get a key by subscribing (free tier available) at https://app.openwebninja.com/api/company-database ## Topics glassdoor company data api, company data api, company search api, company profile api, company lookup api, company lookup by domain, company ratings data, company revenue data, lead generation api, crm enrichment api ## Links - API page: https://www.openwebninja.com/api/company-database - Get an API key / subscribe: https://app.openwebninja.com/api/company-database - Pricing & plans: https://app.openwebninja.com/api/company-database/pricing - Website: https://www.openwebninja.com - OpenAPI spec: https://openwebninja.s3.us-east-1.amazonaws.com/portal/openapi/company_data.yaml - Support: support@openwebninja.com _Last updated: 2026-11-04_