NAV
shell javascript

Introduction

# Base URL
curl 'https://company.bigpicture.io'

Install the Node bindings using the bigpicture-node npm package.

npm install bigpicture-node

The BigPicture API is organized around REST. Our API has predictable resource-oriented URLs, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.

Our enrichment APIs include the Company API, to lookup company data by domain name, and the IP API, to lookup an IP address and return the company associated with that IP.

We currently support the following client libraries:

Authentication

Authentication by passing a token in an Authorization header:

curl 'https://company.bigpicture.io/v1/companies/find?domain=bigpicture.io' \
    -H 'Authorization: {API_KEY}'
import BigPicture from 'bigpicture-node';
const bigPicture = BigPicture('API_KEY');

// Or using commonjs modules
const bigpicture = require('bigpicture-node').default('api_key');

Authenticating with the APIs are accomplished through the use of an API key. You can find your key in the dashboard.

When accessing the APIs, include your API Key within the "Authorization" header of your request. An example of this is shown to the right.

Errors

Our API returns standard HTTP success or error status codes. For errors, we will also include extra information about what went wrong encoded in the response as JSON. The various HTTP status codes we might return are listed below.

HTTP Status codes

Code Title Description
200 OK The request was successful.
202 Async created The resource was asynchronously created
400 Bad request Bad request
401 Unauthorized Your API key is invalid.
402 Over quota Over plan quota on this endpoint.
404 Not found The resource does not exist.
429 Too Many Requests The rate limit was exceeded.
50X Internal Server Error An error occurred with our API.

Error Types

{
  "error": {
    "type": "bad_request",
    "message": "Bad Request"
  }
}
Error Code Meaning
async_created Your request has been received. Try this request again in a few minutes.
bad_request Your request is invalid.
not_found The record was not found.
rate_limit Too many requests made to the API too quickly.
api_error An error occurred internally with BigPicture's API.

Rate Limiting

Example rate limit error response.

HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1624665413

All API requests are currently subject to rate limits of 600 requests per minute, apart from the streaming APIs that are set to 5 requests per minute. If you need a higher limit, email us and we can discuss it further.

Header Name
X-RateLimit-Limit The maximum number of requests that the consumer is permitted to make per minute.
X-RateLimit-Remaining The number of requests remaining in the current rate limit window.
X-RateLimit-Reset The time at which the current rate limit window resets in UTC epoch seconds.

Webhooks and Streaming

Our system works by doing a real-time search of various sources and doing a deep analysis of the data before returning a final result. Thus if a result is not already in our database or needs to refreshed, a real-time search can take some time before the data is ready. So there are couple different methods available for you to consider.

Default Lookup

The default functionality is to return a 200 status with the data if it's in our database. Otherwise, if we need to do a search, we will return an 202 status. You can then either poll the endpoint, or make another request in a few minutes once we've had some time to process the data.

Webhooks

Webhook request example

curl 'https://company.bigpicture.io/v1/companies/find?domain=bigpicture.io&webhookUrl=https://requestb.in/wpyz2mwp&webhookId=12345' \
  -H 'Authorization: {API_KEY}'
import BigPicture from 'bigpicture-node';
const bigPicture = BigPicture('API_KEY');
const Company = bigPicture.Company;
Company.find({
    domain: 'bigpicture.io',
    webhookUrl: 'https://requestb.in/wpyz2mwp',
    webhookId: 12345
})
  .then(company => console.log(company))
  .catch(error => console.error(error));

Webhook response

{
  "id": "Your optional webhook id",
  "status": 200,
  "type": "company",
  "body": {
    "name": "BigPicture.io",
    "description": "The easiest way to get advanced website analytics without writing any code.",
    "category": {
        "sector": "Technology",
        "industry": "Software & Computer Services",
        "subIndustry": "Internet",
        "industryGroup": "Technology"
    },
    "//": "..."
  }
}

Webhooks are a mechanism that allow you to supply a URL to the API that we can send data to once an operation is complete.

Webhooks are defined in the request parameters using the webhookUrl field. You can also provide an optional webhookId parameter to link up requests and will be included in the final response.

When a webhook has been provided for a given request, an HTTP POST request will be sent to the URL provided once the process has completed. The payload of the POST request will be sent as JSON and include the following parameters.

Parameter Description
id string
An optional field to help link requests.
status integer
Either a 200 code (success) or 404 (we couldn't find the data).
type string
The type of resource. Currently company.
body object
The company data

Streaming

Streaming request example

curl 'https://company.bigpicture.io/v1/companies/find/stream?domain=bigpicture.io' \
  -H 'Authorization: {API_KEY}'
import BigPicture from 'bigpicture-node';
const bigPicture = BigPicture('API_KEY');
const Company = bigPicture.Company;
Company.find({
    domain: 'bigpicture.io',
    stream: true
})
  .then(company => console.log(company))
  .catch(error => console.error(error));

An alternative to using webhooks is our streaming API. This API is ideal if you don’t mind long lived requests (e.g. you’re making requests to BigPicture from a messaging queue).

Requests made to the streaming API will never return a HTTP 202 status response, and can be held open for up to a 200 seconds.

The only difference between making calls to the normal and streaming API is the path - company.bigpicture.io/v1/companies/find/stream rather than company.bigpicture.io/v1/companies/find.

Company API

The Company API enables you to lookup company data based on a domain name. This can be used to retrieve the company's information such as name, address, industry, headcount, and various other details from their domain name.

API billing is tracked by unique call per 30 day period. So if you didn't cache the data or need to re-process a list of requests, those requests won't count against your quota.

Attributes

The dot notation indicates that the field is one level deep inside the object. If we can’t find data for an attribute, then we’ll set a null value.

{
    "id": "4eec624c-c1b4-43c5-9a91-c96859353ccc",
    "name": "Uber Technologies",
    "legalName": "Uber Technologies, Inc.",
    "domain": "uber.com",
    "domainAliases": [
        "uber-adsystem.com",
        "decarta.com"
    ],
    "url": "https://www.uber.com/",
    "tags": [
        "Mobile Apps",
        "Public Transportation",
        "Ride Sharing",
        "Transportation"
    ],
     "category": {
        "sector": "Technology",
        "industryGroup": "Technology",
        "industry": "Software & Computer Services",
        "subIndustry": "Software"
    },
    "description": "Uber Technologies, Inc. develops and operates proprietary technology applications in the United States, Canada, Latin America, Europe, the Middle East, Africa, and the Asia Pacific. It connects consumers with independent providers of ride services for ridesharing services and other forms of transportation services, including public transit, as well as connect riders and other consumers with restaurants, grocers, other stores, and delivery service providers for meal preparation, grocery, and other delivery services...",
    "foundedYear": 2009,
    "location": "1515 3Rd Street San Francisco, CA 94158 United States of America",
    "geo": {
        "city": "San Francisco",
        "state": "California",
        "country": "United States of America",
        "stateCode": "CA",
        "postalCode": "94158",
        "streetName": "3Rd Street",
        "subPremise": null,
        "countryCode": "US",
        "streetNumber": "1515"
    },
    "metrics": {
        "alexaUsRank": 680,
        "alexaGlobalRank": 1153,
        "employees": 22200,
        "employeesRange": "10K+",
        "marketCap": 86561472512,
        "annualRevenue": 10794000384,
        "estimatedAnnualRevenue": "$10B+",
        "raised": 2400000000
    },
    "tech": [
        "google_analytics",
        "wordpress"
    ],
    "facebook": {
        "handle": "uber"
    },
    "linkedin": {
        "handle": "company/uber-com"
    },
    "twitter": {
        "id": "19103481",
        "bio": "We wear masks to help protect our neighbors, our families, and our communities. Please wear a face cover or mask.\n\nNo mask. No ride.",
        "site": "http://uber.com",
        "avatar": "https://pbs.twimg.com/profile_images/1045783102000230400/TPLLaqYR_normal.jpg",
        "handle": "Uber",
        "location": "Global",
        "followers": 1053046,
        "following": 55
    },
    "crunchbase": {
        "handle": "organization/uber"
    },
    "logo": "http://logo.bigpicture.io/logo/uber.com",
    "emailProvider": false,
    "type": "public",
    "ticker": "UBER",
    "phone": "1-415-801-4068"
}
Attribute Description
id string
Internal ID
domain string
Domain name of company
name string
Name of company
legalName string
Legal name of company
domainAliases string
Other domains associated with company
url string
Primary website url
tags array
A list of descriptive tags to describe company (see options)
category.sector string
Top level sector to categorize company industry (see options)
category.industryGroup string
Industry group (see options)
category.industry string
Industry (see options)
category.subIndustry string
Sub industry (see options)
description string
The best description we have of the company
foundedYear integer
Founding year of company
location string
Formatted address of company
geo.streetNumber string
Primary office street number
geo.streetName string
Primary office street name
geo.subPremise string
Primary office suite number
geo.city string
Primary office normalized city
geo.state string
Primary office normalized state
geo.stateCode string
Primary office normalized two letter state code
geo.country string
Primary office normalized country
geo.countryCode string
Primary office normalized two letter state code
metrics.alexaUsRank integer
The US Alexa ranking of the domain
metrics.alexaGlobalRank integer
The global Alexa ranking of the domain
metrics.employees integer
Approximate number of employees at company
metrics.employeesRange string
Approximate employee range at company
metrics.marketCap integer
Company's market capitalization
metrics.annualRevenue integer
Company's approximate annual revenue
metrics.estimatedAnnualRevenue string
Company's approximate annual revenue range
metrics.raised string
Company's approximate amount of funding raised
tech array
Technology detected on company's website
facebook.handle string
The Facebook handle of Company's page
linkedin.handle string
The LinkedIn handle
twitter.handle string
The Twitter handle
twitter.id string
Twitter ID
twitter.bio string
Twitter bio
twitter.followers integer
Count of Twitter followers
twitter.following integer
Count of Twitter friends
twitter.location string
Twitter location
twitter.site string
Twitter website
twitter.avatar string
Twitter URL avatar
crunchbase.handle string
Crunchbase handle
logo string
URL logo for the company
emailProvider boolean
Whether or not this domain is an email provider (gmail.com, comcast.net, etc.)
type string
The company type, which is either public, private, nonprofit, or government
ticker string
The ticker symbol the company is traded under
phone string
The primary phone number of company

Lookup

The Company API is designed to look up a company via their domain name. We also support a few other options that may help in the lookup process.

The supported parameters are:

curl 'https://company.bigpicture.io/v1/companies/find?domain=uber.com' \
  -H 'Authorization: {API_KEY}'
import BigPicture from 'bigpicture-node';
const bigPicture = BigPicture('API_KEY');
const Company = bigPicture.Company;
Company.find({domain: 'uber.com'})
  .then(company => console.log(company))
  .catch(error => console.error(error));
Parameter Description
domain string (required)
The domain to lookup.
webhookUrl string
A webhook URL the results will be sent to.
webhookId string
An optional identifier for webhook request.

HTTP Request

When the webhookUrl parameter is included, we will make a POST call to the url you provide when processing is complete.

 curl 'https://company.bigpicture.io/v1/companies/find?domain=uber.com&webhookUrl=https://requestb.in/wpyz2mwp' \
  -H 'Authorization: {API_KEY}'
import BigPicture from 'bigpicture-node';
const bigPicture = BigPicture('API_KEY');
const Company = bigPicture.Company;
Company.find({
    domain: 'uber.com',
    webhookUrl: 'https://requestb.in/wpyz2mwp'
})
  .then(company => console.log(company))
  .catch(error => console.error(error));

When you make a request, the default behavior is to return a 200 status with the data. If the data is not yet in our database or stale we will return an empty 202 status. You can either try the request again in a few minutes, stream the request, or provide a webhook URL we should call when the data is ready.

You can also include an optional webhookId, which will be included with the response data. It's useful if you have a single webhook endpoint and want to match up results to an internal id.

curl 'https://company.bigpicture.io/v1/companies/find?domain=uber.com&webhookUrl=https://requestb.in/wpyz2mwp&webhookId=12345' \
-H 'Authorization: {API_KEY}'
import BigPicture from 'bigpicture-node';
const bigPicture = BigPicture('API_KEY');
const Company = bigPicture.Company;
Company.find({
    domain: 'uber.com',
    webhookUrl: 'https://requestb.in/wpyz2mwp',
    webhookId: 12345
})
  .then(company => console.log(company))
  .catch(error => console.error(error));

Responses

Code Description
200 - OK A match has been found.
202 - Accepted Occurs when email is not yet in our database or the data is stale.
404 - Not Found We could not find a match.

Streaming

Stream example

curl 'https://company.bigpicture.io/v1/companies/find/stream?domain=bigpicture.io' \
  -H 'Authorization: {API_KEY}'
import BigPicture from 'bigpicture-node';
const bigPicture = BigPicture('API_KEY');
const Company = bigPicture.Company;
Company.find({
    domain: 'uber.com',
    stream: true
})
  .then(company => console.log(company))
  .catch(error => console.error(error));

Our system works by doing a real-time search of various sources and doing a deep analysis of the data before returning a final result. If you'd prefer, you can hold the connection open and wait until the data is ready by calling the stream endpoint.

Please note, this endpoint currently has a lower rate limit of 5 requests per min. If you need a higher rate limit, please contact us.

Name to Domain API (BETA)

The Name to Domain API enables you to turn a company name into a domain name. It's powered by a machine learning model to predict the best match for the company name. If needed, you can then use the returned domain to call the Company API to lookup the company data for the domain.

API billing is tracked per request for the 30 day billing period.

Attributes

The dot notation indicates that the field is one level deep inside the object. If we can’t find data for an attribute, then we’ll set a null value.

{
    "name": "Uber Technologies",
    "domain": "uber.com"
}
Attribute Description
domain string
Domain name of company
name string
Name of company

Lookup

The Name to Domain API is designed to look up a company via their name.

The supported parameters are:

NOTE: This API is not yet supported via the Javascript SDK.

curl 'https://company.bigpicture.io/v1/companies/search?name=Uber' \
  -H 'Authorization: {API_KEY}'
curl 'https://company.bigpicture.io/v1/companies/search?name=Uber' \
  -H 'Authorization: {API_KEY}'
Parameter Description
name string (required)
The company name to lookup.

HTTP Request

 curl 'https://company.bigpicture.io/v1/companies/search?name=Uber' \
  -H 'Authorization: {API_KEY}'
curl 'https://company.bigpicture.io/v1/companies/search?name=Uber' \
  -H 'Authorization: {API_KEY}'

When you make a request, the default behavior is to return a 200 status with the data or a 404 status if we can't find a good match.

Responses

Code Description
200 - OK A match has been found.
404 - Not Found We could not find a match.

IP API

The IP API takes an IP address and returns the company associated with that IP, also known as IP to company. This can be used for identifying website traffic for sales & marketing, analytics, and personalization.

This API is built through a combination of public and proprietary data sources that identifies companies by IP regardless of their size. We support both IPv6 and IPv4 adddres.

API billing is tracked by unique call that returns a business type per 30 day period. So if you didn't cache the data or need to re-process a list of requests, those requests won't count against your quota.

Attributes

The dot notation indicates that the field is one level deep inside the object. If we can’t find data for an attribute, then we’ll set a null value.

{
    "ip": "204.4.143.118",
    "type": "business",
    "geo": {
        "city": "London",
        "state": "England",
        "stateCode": "ENG",
        "country": "United Kingdom",
        "countryCode": "GB",
        "continent": "Europe",
        "continentCode": "EU",
        "isEU": true
    },
    "company": {
        "id": "535384f0-e5f0-4a5c-9aeb-339e8304e18f",
        "domain": "goldmansachs.com",
        "name": "Goldman Sachs Group",
        "legalName": "The Goldman Sachs Group, Inc.",
        "logo": "http://logo.bigpicture.io/logo/goldmansachs.com",
        "url": "https://www.goldmansachs.com/",
        "tags": [
            "Finance",
            "Financial Services",
            "FinTech"
        ],
        "//": "..."
    }
}
Attribute Description
ip string
IP address that was requested
type string
The type of result (business, isp, hosting).
geo string
A object containing location data for requested IP
geo.city string
City that this IP is located in
geo.state string
State that this IP is located in
geo.stateCode string
State code for this IP’s state
geo.country string
Country that this IP is located in
geo.countryCode string
Country code for this IP’s country
geo.continent string
Continent that this IP is located in
geo.continentCode string
Continent code for this IP’s continent
geo.isEU boolean
Whether this IP is located in the European Union (EU)
company object
The company data associated with the IP. Refer to our Company API documentation for schema information.

Lookup

The IP API is designed to transform an IP to company profile.

curl 'https://ip.bigpicture.io/v1/companies/ip?ip=204.4.143.118' \
  -H 'Authorization: {API_KEY}'
import BigPicture from 'bigpicture-node';
const bigPicture = BigPicture('API_KEY');
const Ip = bigPicture.Ip;
Ip.find({ip: '204.4.143.118'})
  .then(response => console.log(response))
  .catch(error => console.error(error));
Parameter Description
ip string (required)
The IP address to lookup.

HTTP Request

When you make a request, the default behavior is to return a 200 status with the data.

Responses

Code Description
200 A match has been found.
404 We could not find a match.
500 We encountered an error looking up the company.