# Get Credit Balance
Source: https://docs.fullenrich.com/api/v2/account/credits/get
api/v2/reference/openapi.yml GET /account/credits
This endpoint provides the current balance of credits available in your workspace.
# Check If API Key Is Valid
Source: https://docs.fullenrich.com/api/v2/account/keys/verify/get
api/v2/reference/openapi.yml GET /account/keys/verify
This endpoint checks if your API key is valid.
# Look Up Company
Source: https://docs.fullenrich.com/api/v2/company/lookup/post
api/v2/reference/openapi.yml POST /company/lookup
Look up a single company using its identifiers (domain, or professional network URL/ID). Returns the best matching company.
The Company Look Up endpoint returns a single company when you already know which one you are looking for. Provide an identifier and the API matches the best corresponding company.
You can look up a company by its **domain** or its **professional network URL or ID** for an exact match.
The response has the same shape as [Search Company](/api/v2/company/search/post), but always contains at most one company.
[Search API pricing](/api/v2/general/credit)
# Search Company
Source: https://docs.fullenrich.com/api/v2/company/search/post
api/v2/reference/openapi.yml POST /company/search
Search for companies based on various filters. Multiple filters within the same field are combined with AND logic.
The Company Search endpoint allows you to search for companies by size, industry, location, founding year, specialties, and more. It is designed to help you build clean company lists for prospecting, enrichment, or market analysis.
**How filters work**
If you filter by company industries \["Technology, Information and Internet", "Financial Services"] and company locations \["France", "United States"], the API returns results where the company industry is either Technology, Information and Internet or Financial Services, AND the company location is either France or United States.
In other words, a result must satisfy at least one value in every filter category you specify.
Within a category, values act as OR: a result matches if it fits any of the values. Across categories, the logic is AND: a result must match all categories to be returned.
**If you want to retrieve one specific company,** you can search directly using its professional network URL or domain for an exact match.
[Search API pricing](/api/v2/general/credit)
For a full list of supported filters and accepted values (industries, company types, seniority levels, etc.)
For a full list of supported filters and accepted values (industries, company types, seniority levels, etc.)
# Get Enrichment Result
Source: https://docs.fullenrich.com/api/v2/contact/enrich/bulk/get
api/v2/reference/openapi.yml GET /contact/enrich/bulk/{enrichment_id}
Use this endpoint to retrieve the result from an enrich.
You don’t need to use this endpoint if you are using a webhook. Using a webhook is the method we recommend to get the result as soon as the enrichment is done.
# Start Bulk Enrichment
Source: https://docs.fullenrich.com/api/v2/contact/enrich/bulk/post
api/v2/reference/openapi.yml POST /contact/enrich/bulk
Learn how to authenticate your API requests with your API key.
Use this endpoint to find the contact information of any B2B person:
* Work email (1 credit)
* Mobile phone number (10 credits)
* Personal Email (3 credits)
#### Input needed
To enrich a contact, you must provide either:
1. `first_name` + `last_name` & `company` (domain or company\_name)
2. `linkedin_url`
For the best results, provide as much information as possible. Including a LinkedIn URL can improve enrichment rates by +5–20% for emails and +10–60% for mobile phone numbers.
If you pass a `linkedin_url`, we will also return a full contact and company profile (job title, location, headcount, etc.).
#### Practical tips
You can enrich up to 100 contacts in bulk. If you want to enrich only 1 contact, you can pass only 1 contact in the list.
All enrichments started on the API are visible on your FullEnrich dashboard. It is good practice to use a readable 'name' for each enrichment. This way, you can easily search through them. For instance, if you are enriching just one contact, you might name your enrichment 'Firstname Lastname'.
To pass specific properties, utilize the 'custom' field by passing an object. For example, if you are enriching a contact from your CRM, include the CRM 'contact\_id' in the custom object. This allows you to reference the contact\_id when you receive the result on your webhook. The custom value should be a cast as a string (number will return an error)
To retrieve the results of your enrichment, you can either provide a **webhook URL** \[recommended] or call the **GET /bulk/enrichment\_id** endpoint \[not recommended].
Learn how to receive results in real-time, set up per-contact webhooks, and track requests with custom fields.
# Get Reverse Email Result
Source: https://docs.fullenrich.com/api/v2/contact/reverse/email/bulk/get
api/v2/reference/openapi.yml GET /contact/reverse/email/bulk/{enrichment_id}
Use this endpoint to retrieve the result from a reverse email lookup.
Use this endpoint to retrieve the result from a reverse email lookup.
You don’t need to use this endpoint if you are using a webhook. Using a webhook is the method we recommend to get the result as soon as the enrichment is done.
# Reverse Email Lookup
Source: https://docs.fullenrich.com/api/v2/contact/reverse/email/bulk/post
api/v2/reference/openapi.yml POST /contact/reverse/email/bulk
Learn how to authenticate your API requests with your API key.
Get the full Person and Company profile from an email. This endpoint works with:
* Work emails
* Personal emails
If we find who's behind the email, **1** credit will be used.
Learn how to receive results in real-time, set up per-contact webhooks, and track requests with custom fields.
# Authentication
Source: https://docs.fullenrich.com/api/v2/general/authentication
To ensure the security of your data and to authenticate requests, FullEnrich API uses Bearer Authentication. This means that you need to include a valid API key in the Authorization header of each request you make to our API.
Each request to our API endpoints must include this authorization header.
Here's how to include your API key in your request:
```http theme={null}
Authorization: Bearer YOUR_API_KEY
```
Your API key can be found on your API Dashboard
Click here to grab your API Key
Be sure to replace YOUR\_API\_KEY with the actual API key from your dashboard. Without a valid API key in your request, you will not be able to access the API endpoints and will receive a 401 Unauthorized response.
Keep your API key secure and do not share it publicly.
If you suspect that your API key has been compromised, you should regenerate it immediately from your account dashboard to prevent unauthorized access.
# Credits & Testing Tips
Source: https://docs.fullenrich.com/api/v2/general/credit
## How credits work
The use of credits is the same on the API as it is on the rest of the platform.
Credits are only consumed when we actually find a result.
**Contact Data Enrichment**\*– find email or phone numbers\*
* If a Deliverable, High Probability, or Catch-all email is found, **1** credit will be used.
* If a mobile phone is found, **10** credits will be used.
* If a valid personal email is found, **3** credits will be used.
*(For custom plans, this ratio might be different)*
**Reverse Email Lookup** – Find the person and company behind an email
* If we find who's behind an email, **1** credit will be used
**Search API** – Search for people or companies
* Each person or company returned costs **0.25** credit (once a person/company have been exported once via the UI, or the API, it does not cost anything to export it again)\
\
*For high-volume search use cases (hundreds of thousands or millions of searches), we offer custom pricing models that make large-scale search economically viable. Contact our team to discuss.*
## Will I be charged for duplicate contacts?
**Short answer: No. (with a but)**
We don't typically charge for re-enriching a previously enriched contact, as our system deduplicates based on the information you provide.
However, there are exceptions. If the input information differs, such as variations in the first name, last name, company domain, LinkedIn profile URL, etc., we will not successfully deduplicate.
**Also we do not deduplicate contacts within the same bulk.**
Finally, **simultaneous enrichment requests for the same contact will prevent deduplication**, as they require one enrichment to be completed before we can deduplicate.
(Custom fields do not affect deduplication)
## How long do we store the data?
For GDPR compliance, we only store enrichment data for **3 months**.
If you try to fetch results with the same **Enrichment ID** after 3 months, you'll get an error.
* If you re-enrich the same contact **within 3 months**, we'll return the result from your history, creating a new enrichment but costing **0 credits** (see section above about duplicate contacts).
* If you re-enrich the same contact **after 3 months**, we'll launch a fresh enrichment. This will create a new enrichment and will **cost credits**.
## Setting up low credit alerts
You can set up a low credit alert directly from your FullEnrich dashboard to avoid running out of credits and blocking new enrichments. It's in the settings of the webapp: [**https://app.fullenrich.com/app/settings/credits/alerts/**](https://app.fullenrich.com/app/settings/credits/alerts/)
We recommend enabling this alert for production use to stay notified before your credits run out and keep your enrichment workflow running smoothly.
## Tips for testing ✨
We have hard-coded some contacts from the FullEnrich team, such as
```json theme={null}
{
"first_name": "Grégoire",
"last_name": "Démogé",
"domain": "fullenrich.com",
"company_name": "FullEnrich",
"linkedin_url": "https://www.linkedin.com/in/demoge/"
}
```
These use **0 credits**, allowing you to test without spending any credits. (Be careful to use this exact data; otherwise, it might not work.)
Also, since:
* You won't be charged for duplicate contacts
* Previously enriched contacts are pulled from memory instead of doing the waterfall process again (takes less time)
**We suggest using the same contact for most of your testing:** Enrichment will be fast, and won't cost any credits.
A quick way to check the result endpoint and troubleshoot is to use a webhook URL from [**webhook.site**](http://webhook.site). (free service)
# Data Dictionary
Source: https://docs.fullenrich.com/api/v2/general/data-dictionary
Every data point you get from FullEnrich — across Search, Enrichment, and Reverse Email.
This is the complete list of **output** data points FullEnrich returns. Each row
is one field: its API name (dot notation relative to its parent object), type,
what it means, and an example. For the accepted **filter** values, see
[Accepted Filter Values](/api/v2/general/enums).
# 👤 People
### 🪪 Identity
| Data point | API field | Type | Description | Example |
| -------------------------------- | ------------------------------------------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| Full name | `full_name` | string | First and last name | `Greg Démogé` |
| First name | `first_name` | string | First name | `Greg` |
| Last name | `last_name` | string | Last name | `Démogé` |
| Headline | `headline` | string | Short professional tagline written by the person on their professional network profile | `Co-founder & CPO at FullEnrich \| B2B Data & Enrichment` |
| Description | `description` | string | Free-text summary written by the person in the about section of their professional network profile (not always present) | `Building FullEnrich to make B2B contact data reliable…` |
| City | `location.city` | string | City | `San Francisco` |
| Region / state | `location.region` | string | Region or state | `California` |
| Country | `location.country` | string | Country name | `United States` |
| Country code | `location.country_code` | string | ISO 3166-1 alpha-2 code | `US` |
| Professional network URL | `social_profiles.professional_network.url` | string | Profile URL | `https://www.linkedin.com/in/demoge` |
| Professional network handle | `social_profiles.professional_network.handle` | string | Profile handle | `demoge` |
| Professional network id | `social_profiles.professional_network.id` | integer | Numeric profile id | `583778722` |
| Professional network connections | `social_profiles.professional_network.connection_count` | integer | Network size | `500` |
| Language | `languages[].language` | string | Language spoken | `english` |
| Language proficiency | `languages[].proficiency` | string (enum) | Proficiency level | `FULL_PROFESSIONAL` |
### 📇 Verified contact info
Returned by **Enrichment** and **Reverse Email**. Only deliverable/valid results are returned, so any of these may be absent for a given contact.
| Data point | API field | Type | Description | Example |
| --------------------- | --------------------------------------- | ------------- | ------------------------------------------ | --------------------------------------- |
| Work email | `contact_info.work_emails[].email` | string | Verified professional email | `greg@fullenrich.com` |
| Work email status | `contact_info.work_emails[].status` | string (enum) | Deliverability status | `DELIVERABLE` |
| Personal email | `contact_info.personal_emails[].email` | string | Verified personal email | `greg.demoge@gmail.com` |
| Personal email status | `contact_info.personal_emails[].status` | string (enum) | Deliverability status | `DELIVERABLE` |
| Mobile number | `contact_info.phones[].number` | string | Verified mobile number, worldwide coverage | `+1 415 555 0132` · `+33 6 12 34 56 78` |
| Mobile region | `contact_info.phones[].region` | string | ISO 3166-1 alpha-2 code of the number | `US` · `FR` |
We also return `most_probable_work_email`, `most_probable_personal_email`, and
`most_probable_phone` — the single best result for each type, matched by domain
proximity and bounce rate (`INVALID` emails excluded). For the phones above, the
US number is the most probable (`most_probable_phone` → `+1 415 555 0132`). Each
has the same sub-fields as the corresponding array element.
### 💼 Current & past roles
Returned under `employment.current` (single object) and `employment.all[]` (full
history). **Each field below exists per experience.**
| Data point | API field | Type | Description | Example |
| ---------------- | ------------------------------ | ----------------- | --------------------------------------------------------------- | ----------------------------------------- |
| Job title | `title` | string | Job title | `Co-founder & CPO` |
| Seniority | `seniority` | string (enum) | Seniority level | `Founder` |
| Job function | `job_functions[].function` | string (enum) | Function category | `Executive & Leadership` |
| Sub-function | `job_functions[].sub_function` | string (enum) | Role within the function | `Founder/Owner` |
| Role description | `description` | string | Declarative description of the role (not always present) | `Leading product and data at FullEnrich…` |
| Company | `company` | object | Employer — full company profile, see [Company](#-company) | `FullEnrich` |
| Start date | `start_at` | string (ISO 8601) | Employment start, `YYYY-MM-DDTHH:MM:SSZ` | `2024-01-01T00:00:00Z` |
| End date | `end_at` | string (ISO 8601) | Employment end — **only for past roles** (omitted when current) | `2023-12-31T00:00:00Z` |
| Is current | `is_current` | boolean | Whether this is the current employment | `true` |
### 🎓 Education & skills
| Data point | API field | Type | Description | Example |
| --------------- | -------------------------- | ----------------- | ---------------------------- | --------------------------------------------------- |
| School | `educations[].school_name` | string | Institution | `Stanford University` |
| Degree | `educations[].degree` | string | Degree | `MS` |
| Education start | `educations[].start_at` | string (ISO 8601) | Start date | `2015-09-01T00:00:00Z` |
| Education end | `educations[].end_at` | string (ISO 8601) | End date | `2019-06-30T00:00:00Z` |
| Skills | `skills[]` | string array | Professional declared skills | `Design Strategy, Interaction Design, Lean Startup` |
# 🏢 Company
Every person record embeds the **full company profile** for their current (and
past) employers, under `employment.current.company` / `employment.all[].company`.
Company Search and Company Lookup return the same object.
### 🏷️ Identity
| Data point | API field | Type | Description | Example |
| ------------------------------ | ------------------------------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
| Company id | `id` | string (uuid) | Unique company identifier | `a1b2c3d4-e5f6-7890-abcd-ef1234567890` |
| Company name | `name` | string | Legal or brand name | `FullEnrich` |
| Domain | `domain` | string | Company domain | `fullenrich.com` |
| Website | `website` | string | Company website URL as declared by the company — may differ from `domain` (subdomain, path, tracking parameters). Not always present | `https://www.fullenrich.com` |
| Description | `description` | string | Company description | `Waterfall enrichment across 20+ vendors to find verified emails and phone numbers.` |
| Logo URL | `logo_url` | string | Company logo hosted by FullEnrich, built from the professional network handle | `https://app.fullenrich.com/logo/company/handle/fullenrich` |
| Professional network id | `social_profiles.professional_network.id` | integer | Numeric company id | `98444201` |
| Professional network handle | `social_profiles.professional_network.handle` | string | Company page handle | `fullenrich` |
| Professional network URL | `social_profiles.professional_network.url` | string | Company page URL | `https://www.linkedin.com/company/fullenrich` |
| Professional network followers | `social_profiles.professional_network.connection_count` | integer | Followers count | `24507` |
### 📊 Firmographics
| Data point | API field | Type | Description | Example |
| --------------- | ------------------------ | ------------- | ------------------------------------------------------------ | -------------------------------- |
| Industry | `industry.main_industry` | string (enum) | Primary industry (standard industry taxonomy, 200+ values) | `Software Development` |
| Specialties | `specialties[]` | string array | Declarative tags and focus areas | `B2B data, Email & phone finder` |
| Company type | `company_type` | string (enum) | Public, private, nonprofit… | `Privately Held` |
| Headcount | `headcount` | integer | Exact employee count (may be `0` even when a range is known) | `65` |
| Headcount range | `headcount_range` | string (enum) | Size bracket | `11-50` |
| Year founded | `year_founded` | integer | Founding year (`0` when unknown) | `2023` |
### 📍 Location
| Data point | API field | Type | Description | Example |
| ----------------- | ------------------------------------- | ------ | ----------------------------------------------------------------------------------------------- | ---------------------------------------- |
| HQ street | `locations.headquarters.line1` | string | Street address | `1885 Mission St` |
| HQ address line 2 | `locations.headquarters.line2` | string | Full location string | `San Francisco, California 94103, US` |
| HQ city | `locations.headquarters.city` | string | City | `San Francisco` |
| HQ region | `locations.headquarters.region` | string | State or region | `California` |
| HQ country | `locations.headquarters.country` | string | Country name | `United States` |
| HQ country code | `locations.headquarters.country_code` | string | ISO 3166-1 alpha-2 code | `US` |
| Offices | `locations.offices[].{line1, line2}` | array | Additional offices — **raw address lines only** (no parsed city/region); can be `null` or empty | `111 8th Ave` · `New York, NY 10011, US` |
# Accepted values
Enum value lists are maintained in one place — they are not duplicated here:
| Field | Source of truth |
| ---------------------------------------------------------------------- | --------------------------------------------------------- |
| Seniority, Job function & sub-function, Company industry, Company type | [Accepted Filter Values](/api/v2/general/enums) |
| Email status (`work/personal email status`) | [Email Verification Status](/api/v2/general/email-status) |
Two short sets that have no dedicated page:
* **Headcount range:** `1-10` · `11-50` · `51-200` · `201-500` · `501-1000` · `1001-5000` · `5001-10000` · `10001+`
* **Language proficiency:** `NATIVE_OR_BILINGUAL` · `FULL_PROFESSIONAL` · `PROFESSIONAL_WORKING` · `LIMITED_WORKING` · `ELEMENTARY`
# Email Verification Status
Source: https://docs.fullenrich.com/api/v2/general/email-status
Every email we return undergoes a triple verification process to ensure its validity. If an email is flagged as invalid by one provider, we continue checking until a valid email is confirmed or all options are exhausted.
### Email Statuses
We categorize emails into four statuses:
**DELIVERABLE**: 2% bounce rate.
**HIGH\_PROBABILITY**: 9% bounce rate. (those are emails that are catch-all, but likely valid based on our triple verification process)
**CATCH\_All**: higher bounce rate than high\_probability.
**INVALID**: Very likely to bounce.
### "most\_probable\_work\_email" Field
This field returns the work email with the lowest bounce rate. If multiple valid emails are found, we prefer the one with a domain closest to the user-entered domain. INVALID emails are excluded from this field.
### Email Status in the Response
The email object includes a `status` field that indicates the verification status of that email.
***
If you want more details about the triple verification process, here is a link to the Helpdesk.
[https://help.fullenrich.com/en/articles/9541151-how-our-email-verification-works](https://help.fullenrich.com/en/articles/9541151-how-our-email-verification-works)
# Accepted Filter Values
Source: https://docs.fullenrich.com/api/v2/general/enums
List of enums included in the output that can also be used as filters
```
Administrative
Data Entry
Executive Assistant
General Administrative
Office Management
Receptionist
Records Management
Scheduling
Virtual Assistant
Agriculture & Environment
Agriculture/Landscaping
ESG & Sustainability
Veterinary
Construction & Trades
Carpenter
Electrician
General Contractor
HVAC
Heavy Equipment Operators
Mason
Painter
Plumber
Roofer
Safety/HSE
Site Supervisor
Surveyor
Traditional Crafts
Welder
Consulting & Advisory
Advisors
Coaching
ESG & Sustainability
Financial Consulting
HR Consulting
IT Consulting
Independent Consulting
Management Consulting
Operations Consulting
Strategy Consulting
Customer Service
Call Center
Client Services
Customer Experience
Customer Operations
Customer Support
General Customer Service
Help Desk
IT Support/Help Desk
Technical Support
Design
Architecture
Brand Design
Creative/Design
Fashion Design
Graphic Design
Illustration
Industrial Design
Interaction Design
Interior Design
Motion Design
Photography
UI/UX Design
Visual Design
Education
Academia
Curriculum Development
Early Childhood Education
Education - Teaching
Educational Administration
Higher Education
K-12 Teaching
Library Services
Private Tutoring
Special Education
Training & Facilitation
Energy & Utilities
Energy/Mining
Mining
Nuclear
Oil & Gas
Power Generation
Renewable Energy
Utilities Operations
Entertainment & Gaming
Cultural Institutions
Sports
Video Games
Executive & Leadership
Board Member
Entrepreneur
Executive/C-Level
Finance Leadership
Founder/Owner
General Manager
HR Leadership
Managing Director
Marketing Leadership
Operations Leadership
Partner
President
Product Leadership
Sales Leadership
Supervisory/Team Lead
Technical Leadership
VP/Executive
Finance
Accounting
Audit
Banking/Finance
Billing & Collections
Controllers
Corporate Finance
Credit Analysis
ESG & Sustainability
Finance Leadership
Financial Planning & Analysis
Financial Reporting
Insurance
Investment
Investor Relations
Mergers & Acquisitions
Real Estate
Risk Management
Tax
Treasury
Hospitality & Tourism
Bartender
Chef/Culinary
Event Coordinator
Event Planning
Food Service
Front Desk
Hotel Management
Hotels/Hospitality
Housekeeping
Restaurant Management
Server/Waitstaff
Tour Guide
Travel Agent
Travel/Tourism
Human Resources
Compensation & Benefits
Diversity & Inclusion
Employee Relations
General HR
HR Business Partner
HR Compliance
HR Leadership
HR Operations
Learning & Development
Organizational Development
Payroll
People Analytics
Recruiting/Talent Acquisition
Talent Management
Workforce Planning
Legal
Compliance
Contracts
Corporate Law
Employment Law
General Legal
Intellectual Property
Litigation
Paralegal
Privacy & Data Protection
Regulatory Affairs
Marketing
Advertising
Brand Marketing
Communications
Content Marketing
Demand Generation
Digital Marketing
Email Marketing
Event Marketing
Event Planning
General Marketing
Growth Marketing
Market Research
Marketing Leadership
Marketing Operations
Product Marketing
Public Relations
SEO/SEM
Social Media Marketing
Media & Communications
Audio/Sound
Broadcasting
Content Creator
Copywriting
Editing
Film/Entertainment
Journalism
Public Affairs
Social Media Management
Translation/Writing
Video Production
Medical & Health
Allied Healthcare
Anesthesiology
Cardiology
Dental
Emergency Medicine
Healthcare Clinical
Medical Administration
Medical Research
Nursing
Oncology
Pediatrics
Pharmacy
Physical Therapy
Physicians/Doctors
Psychiatry/Psychology
Radiology
Surgery
Therapy/Mental Health
Veterinary
Non-Profit & Government
Advocacy
Community Outreach
Cultural Institutions
Fundraising
Government Administration
Grant Writing
International Development
Non-Profit/Volunteer
Nonprofit Management
Public Policy
Religious
Social Services
Social Work
Not Employed
Career Break
Freelancer
Job Seeker
Retired
Student
Operations
Business Operations
Distribution
ESG & Sustainability
Facilities Management
Fleet Management
IT Procurement
Inspector/Examiner
Inventory Management
Logistics
Manufacturing/Warehouse
Operations Leadership
Operations/General Mgmt
Process Improvement
Quality Management
Safety/HSE
Supply Chain/Procurement
Vendor Management
Warehouse Management
Personal & Home Services
Beauty
Childcare
Cleaning/Janitorial
Domestic/Care
Eldercare
Fitness/Wellness
Home Repair
Massage Therapy
Personal Assistant
Personal Training
Pet Services
Traditional Crafts
Product
Product Analytics
Product Leadership
Product Management
Product Operations
Product Owner
Product Strategy
Technical Product Management
UX Research
Project & Program Management
Agile/Scrum
Business Analysis
Construction Project Management
IT Project Management
IT/Agile
PMO
Program Management
Public Safety & Security
Corrections
EMT/Paramedic
Firefighter
Inspector/Examiner
Military
Police Officer
Police/Fire/EMT
Private Investigation
Security (Physical)
Security Guard
Research & Science
Clinical Research
Environmental Science
Laboratory
Policy Research
Scientific Research
Social Science
Retail & Consumer
Buying/Merchandising
Cashier
E-commerce Operations
Loss Prevention
Retail Sales
Store Management
Visual Merchandising
Sales
Account Management
Business Development
Channel Sales
Customer Success
Enterprise Sales
Field Sales
General Sales
Inside Sales
Partnership Sales
Real Estate
Revenue Operations
SDR/BDR
Sales Enablement
Sales Engineering
Sales Leadership
Sales Operations
Software
AI/Machine Learning
Backend Engineering
Cloud Engineering
Cloud Operations
Cybersecurity
Data Engineering/Analytics
Database Administration
Database Engineering
DevOps
Embedded Systems
Enterprise Architecture
Firmware Engineering
Frontend Engineering
Fullstack Engineering
IT Infrastructure
IT/Agile
Mobile Engineering
Network Administration
Platform Engineering
QA/Quality
Security Engineering
Site Reliability Engineering
Software Engineering
Solutions Architecture
Systems Administration
Technical Leadership
Technical Writing
UI/UX Design
Video Games
Traditional Engineering
Aerospace Engineering
Architecture
Automotive Engineering
Biomedical Engineering
Chemical Engineering
Civil Engineering
Electrical Engineering
Environmental Engineering
Manufacturing Engineering
Materials Engineering
Mechanical Engineering
Robotics Engineering
Structural Engineering
Technician
Transportation & Logistics
Customs/Import-Export
Delivery Driver
Dispatcher
Freight Forwarding
Maritime
Pilot
Train Operator
Transportation
Truck Driver
```
```
Import & Export
Think Tanks
Environmental Services
Architecture and Planning
Staffing and Recruiting
Legal Services
IT Services and IT Consulting
Insurance
Non-profit Organizations
Venture Capital and Private Equity Principals
Home Health Care Services
Primary and Secondary Education
Software Development
Research Services
Law Practice
Real Estate
Individual and Family Services
Mental Health Care
Real Estate Agents and Brokers
Health and Human Services
Hospitality
Farming
Fundraising
Accounting
Medical Device
Beverage Manufacturing
Wellness and Fitness Services
Hospitals and Health Care
Marketing Services
Financial Services
Outsourcing and Offshoring Consulting
Chemical Manufacturing
Executive Offices
Advertising Services
Transportation, Logistics, Supply Chain and Storage
E-Learning Providers
Travel Arrangements
Education Management
Industry Associations
Information Technology & Services
Writing and Editing
Public Safety
Media Production
Business Consulting and Services
Oil and Gas
Railroad Equipment Manufacturing
Oil, Gas, and Mining
Strategic Management Services
Technology, Information and Internet
Landscaping Services
Wholesale Building Materials
Sporting Goods Manufacturing
Motor Vehicle Manufacturing
Security and Investigations
Civic and Social Organizations
Apparel Manufacturing
Construction
Biotechnology Research
Spectator Sports
Farming, Ranching, Forestry
Housing and Community Development
Veterinary Services
Consumer Services
Utilities
Engineering Services
Professional Training and Coaching
Blogs
Performing Arts
Technology, Information and Media
Human Resources Services
Higher Education
Outsourcing/Offshoring
Wholesale
Building Construction
Industrial Machinery Manufacturing
Government Administration
Newspaper Publishing
Public Policy Offices
Facilities Services
Food and Beverage Services
Automation Machinery Manufacturing
Research
Manufacturing
Health, Wellness & Fitness
Broadcast Media Production and Distribution
Data Infrastructure and Analytics
Retail Furniture and Home Furnishings
Leisure, Travel & Tourism
Medical Practices
Machinery Manufacturing
Retail Apparel and Fashion
Medical Equipment Manufacturing
Musicians
Non-profit Organization Management
Graphic Design
Investment Management
Retail
Computer and Network Security
Repair and Maintenance
Education
Automotive
Translation and Localization
Consumer Goods
Photography
Information Services
Apparel & Fashion
Truck Transportation
Public Relations and Communications Services
Education Administration Programs
Design Services
Pharmaceutical Manufacturing
Wholesale Import and Export
Restaurants
Animation and Post-production
Textile Manufacturing
Transportation/Trucking/Railroad
Freight and Package Transportation
Food & Beverages
Law Enforcement
Shipbuilding
Computers and Electronics Manufacturing
Design
Glass, Ceramics and Concrete Manufacturing
Artists and Writers
Paper and Forest Product Manufacturing
Capital Markets
Mining
Printing Services
Furniture and Home Furnishings Manufacturing
Book and Periodical Publishing
Personal Care Product Manufacturing
Religious Institutions
Business Intelligence Platforms
Market Research
Public Health
International Trade and Development
Appliances, Electrical, and Electronics Manufacturing
Banking
Movies, Videos, and Sound
Renewable Energy Semiconductor Manufacturing
Retail Luxury Goods and Jewelry
Food and Beverage Manufacturing
Telecommunications
Food Production
Mechanical Or Industrial Engineering
Language Schools
Services for Renewable Energy
Human Resources
International Affairs
Sports Teams and Clubs
Ranching
Entertainment Providers
Holding Companies
Retail Art Supplies
Civil Engineering
Interior Design
Political Organizations
Events Services
Chiropractors
Fisheries
Forestry and Logging
Recreational Facilities
Solar Electric Power Generation
Plastics Manufacturing
Internet News
Sports and Recreation Instruction
Tobacco Manufacturing
Wholesale Paper Products
IT System Custom Software Development
Leasing Residential Real Estate
Computer Hardware Manufacturing
Blockchain Services
Online Audio and Video Media
Museums, Historical Sites, and Zoos
Airlines and Aviation
Industrial Automation
Veterinary
Cosmetics
Retail Office Equipment
Leasing Non-residential Real Estate
Entertainment
Wholesale Chemical and Allied Products
Embedded Software Products
Social Networking Platforms
Investment Banking
Equipment Rental Services
Defense and Space Manufacturing
Bars, Taverns, and Nightclubs
Retail Motor Vehicles
Media and Telecommunications
Wholesale Raw Farm Products
Operations Consulting
Sightseeing Transportation
Dairy Product Manufacturing
Renewable Energy Power Generation
Computer Networking Products
Administration of Justice
Janitorial Services
Alternative Medicine
Historical Sites
Building Materials
Warehousing and Storage
Online and Mail Order Retail
Business Content
Music
Maritime Transportation
Professional Organizations
Engines and Power Transmission Equipment Manufacturing
Philanthropic Fundraising Services
Agriculture, Construction, Mining Machinery Manufacturing
Packaging & Containers
Nursing Homes and Residential Care Facilities
Fabricated Metal Products
Retail Groceries
Wood Product Manufacturing
Retail Office Supplies and Gifts
Retail Health and Personal Care Products
Computer Hardware
Dentists
Internet Marketplace Platforms
Furniture
Aviation and Aerospace Component Manufacturing
Motor Vehicle Parts Manufacturing
Semiconductor Manufacturing
Nanotechnology Research
Renewables & Environment
IT System Data Services
Packaging and Containers Manufacturing
Government Relations Services
Insurance Agencies and Brokerages
Computer Games
Paper & Forest Products
E-learning
Community Services
Space Research and Technology
Business Supplies & Equipment
Aviation & Aerospace
Commercial Real Estate
Metalworking Machinery Manufacturing
Food and Beverage Retail
Digital Accessibility Services
Baked Goods Manufacturing
Armed Forces
Wine & Spirits
Pet Services
Specialty Trade Contractors
Wholesale Appliances, Electrical, and Electronics
Physical, Occupational and Speech Therapists
Alternative Dispute Resolution
Consumer Electronics
Arts & Crafts
Wholesale Computer Equipment
Robotics Engineering
Gambling Facilities and Casinos
Community Development and Urban Planning
Measuring and Control Instrument Manufacturing
Personal Care Services
Mobile Food Services
Golf Courses and Country Clubs
Luxury Goods & Jewelry
Biotechnology
Ground Passenger Transportation
Wireless Services
Internet Publishing
Defense & Space
Electrical Equipment Manufacturing
Mobile Computing Software Products
Building Finishing Contractors
Museums
Program Development
Paint, Coating, and Adhesive Manufacturing
Investment Advice
Building Equipment Contractors
Wholesale Luxury Goods and Jewelry
Telephone Call Centers
Boilers, Tanks, and Shipping Container Manufacturing
IT System Design Services
Online Media
Fine Arts Schools
Household Services
Professional Services
Air, Water, and Waste Program Management
Environmental Quality Programs
Commercial and Industrial Machinery Maintenance
Retail Building Materials and Garden Equipment
Architectural and Structural Metal Manufacturing
Desktop Computing Software Products
Primary Metal Manufacturing
Technical and Vocational Training
Glass Product Manufacturing
Electric Power Transmission, Control, and Distribution
Wholesale Metals and Minerals
Wholesale Food and Beverage
Administrative and Support Services
Fire Protection
Security Systems Services
Libraries
Electronic and Precision Equipment Maintenance
Vehicle Repair and Maintenance
Maritime
Semiconductors
Electric Lighting Equipment Manufacturing
Executive Search Services
HVAC and Refrigeration Equipment Manufacturing
Real Estate and Equipment Rental Services
Sound Recording
Animation
Security Guards and Patrol Services
Fine Art
Wholesale Machinery
Dance Companies
Sporting Goods
Waste Collection
Mattress and Blinds Manufacturing
Child Day Care Services
Electric Power Generation
Hospitals
Rail Transportation
Nuclear Electric Power Generation
Residential Building Construction
Women's Handbag Manufacturing
Taxi and Limousine Services
Housing Programs
Breweries
Audio and Video Equipment Manufacturing
Renewable Energy Equipment Manufacturing
Building Structure and Exterior Contractors
Warehousing
Movies and Sound Recording
Meat Products Manufacturing
Wholesale Motor Vehicles and Parts
Sheet Music Publishing
Retail Books and Printed News
Amusement Parks and Arcades
Computer Networking
Public Policy
Hotels and Motels
Data Security Software Products
Retail Appliances, Electrical, and Electronic Equipment
Biomass Electric Power Generation
Laundry and Drycleaning Services
Communications Equipment Manufacturing
Mobile Gaming Apps
Dairy
Subdivision of Land
Water, Waste, Steam, and Air Conditioning Services
Collection Agencies
Accessible Architecture and Design
Animal Feed Manufacturing
Retail Art Dealers
Coal Mining
Conservation Programs
Cosmetology and Barber Schools
Wholesale Alcoholic Beverages
Accommodation and Food Services
Wholesale Drugs and Sundries
Loan Brokers
Vocational Rehabilitation Services
Office Administration
Waste Treatment and Disposal
Agricultural Chemical Manufacturing
Transportation Programs
Book Publishing
IT System Operations and Maintenance
Rubber Products Manufacturing
Periodical Publishing
Trusts and Estates
Accessible Hardware Manufacturing
Horticulture
Footwear Manufacturing
Fashion Accessories Manufacturing
Commercial and Service Industry Machinery Manufacturing
Metal Treatments
Climate Technology Product Manufacturing
Surveying and Mapping Services
Wholesale Hardware, Plumbing, Heating Equipment
Caterers
Outpatient Care Centers
Commercial and Industrial Equipment Rental
Retail Pharmacies
Wholesale Apparel and Sewing Supplies
Philanthropy
Services for the Elderly and Disabled
Robot Manufacturing
Water Supply and Irrigation Systems
Soap and Cleaning Product Manufacturing
Retail Florists
Household and Institutional Furniture Manufacturing
Leather Product Manufacturing
Theater Companies
Office Furniture and Fixtures Manufacturing
Plastics and Rubber Product Manufacturing
IT System Training and Support
Construction Hardware Manufacturing
Military and International Affairs
Sugar and Confectionery Product Manufacturing
Medical and Diagnostic Laboratories
Chemical Raw Materials Manufacturing
Wineries
Legislative Offices
Personal and Laundry Services
Transportation Equipment Manufacturing
Radio and Television Broadcasting
Metal Ore Mining
Public Assistance Programs
Wholesale Recyclable Materials
IT System Installation and Disposal
School and Employee Bus Services
Geothermal Electric Power Generation
Wholesale Footwear
Pipeline Transportation
Wind Electric Power Generation
Wholesale Furniture and Home Furnishings
Spring and Wire Product Manufacturing
Climate Data and Analytics
Government Relations
Insurance Carriers
Tobacco
Funds and Trusts
Reupholstery and Furniture Repair
Fruit and Vegetable Preserves Manufacturing
Physicians
Nonmetallic Mineral Mining
Natural Gas Distribution
Regenerative Design
Highway, Street, and Bridge Construction
Shuttles and Special Needs Transportation Services
Credit Intermediation
Steam and Air-Conditioning Supply
Optometrists
Racetracks
Household Appliance Manufacturing
Emergency and Relief Services
Retail Recyclable Materials & Used Merchandise
Utility System Construction
Temporary Help Services
Urban Transit Services
Funeral Services
Smart Meter Manufacturing
Insurance and Employee Benefit Funds
Utilities Administration
Telecommunications Carriers
Performing Arts and Spectator Sports
Turned Products and Fastener Manufacturing
Seafood Product Manufacturing
Postal Services
Wholesale Petroleum and Petroleum Products
Consumer Goods Rental
Nonresidential Building Construction
Distilleries
Retail Musical Instruments
Zoos and Botanical Gardens
Economic Programs
Skiing Facilities
Metal Valve, Ball, and Roller Manufacturing
Oil Extraction
Bed-and-Breakfasts, Hostels, Homestays
Ambulance Services
Pension Funds
IT System Testing and Evaluation
Courts of Law
Securities and Commodity Exchanges
Correctional Institutions
Claims Adjusting, Actuarial Services
Family Planning Centers
Retail Gasoline
Alternative Fuel Vehicle Manufacturing
Wholesale Photography Equipment and Supplies
Satellite Telecommunications
Cutlery and Handtool Manufacturing
Abrasives and Nonmetallic Minerals Manufacturing
Hydroelectric Power Generation
Ranching and Fisheries
Oil and Coal Product Manufacturing
Flight Training
Interurban and Rural Bus Services
Fossil Fuel Electric Power Generation
Artificial Rubber and Synthetic Fiber Manufacturing
Clay and Refractory Products Manufacturing
Footwear and Leather Goods Repair
Secretarial Schools
Energy Technology
Magnetic and Optical Media Manufacturing
Natural Gas Extraction
Cable and Satellite Programming
Lime and Gypsum Products Manufacturing
Circuses and Magic Shows
Fuel Cell Manufacturing
Savings Institutions
Death Care Services
```
```
Partnership
Nonprofit
Educational
Privately Held
Public Company
Self-Owned
Self-Employed
Government Agency
```
```
Owner
Founder
C-level
Partner
VP
Head
Director
Manager
Senior
```
## **Location Filter**
The location field lets you narrow search results by geographic area. It supports up to four levels of precision, from broad to specific:
1. **Continent** (e.g. North America, Europe)
2. **Country** (in English)
3. **State / Region** (in the country’s local language)
4. **Sub-region** (when applicable, in the country’s local language)
5. **City** (in the country’s local language)
You can use any of these levels. You do not need to provide all of them.
Examples of valid values:
* North America
* United States
* California
* San Francisco
* San Francisco, California, United States
**We strongly recommend trying the filter in the UI first.** It gives you a concrete feel for what values exist and how they are interpreted by the system.
### **How granularity works**
The goal of the location system is to let you “zoom” your search, from very broad to very precise. Each level represents a different zoning depth.
Take two concrete cases:
#### San Francisco (US)
Typical levels:
* Country: United States
* State / Region: California
* City: San Francisco
Here, there is no meaningful sub-region between the state and the city. You move directly from California to San Francisco.
You can therefore search at different depths:
* United States → everything in the US
* California → everything in California
* San Francisco → only San Francisco
Each step narrows the scope.
#### Brest (France)
Typical levels:
* Country: France
* Region: Bretagne
* Sub-region: Finistère
* City: Brest
This adds an extra layer between region and city. You can now search at four different depths:
* France → everything in France
* Bretagne → everything in the Brittany region
* Finistère → everything in that department
* Brest → only the city of Brest
The concept is the same in both cases: each level represents a finer geographic boundary. Some countries have more intermediate layers than others, but the mental model is always “zooming in” on the map.
# Filtering Logic Explained
Source: https://docs.fullenrich.com/api/v2/general/filtering-logic-explained
How the filtering mechanism works
**Combining filters**
If you filter by company industries \["Technology, Information and Internet", "Financial Services"] and company locations \["France", "United States"], the API returns results where the company industry is either Technology, Information and Internet or Financial Services, AND the company location is either France or United States.
In other words, a result must satisfy at least one value in every filter category you specify.
Within a category, values act as OR: a result matches if it fits any of the values. Across categories, the logic is AND: a result must match all categories to be returned.
**Exact match ON vs OFF**
When `exact_match` is set to `false`, the API tolerates minor differences like missing words, extra words, or slight reordering. There is no strict word threshold; instead, the matching scores how closely the input aligns with the stored value and returns results that are reasonably close. For example, "VP of Sales" would match "VP Sales" (missing word) or "VP of Sales and Marketing" (extra words).
When `exact_match` is set to `true`, the value must match exactly as stored (case-insensitive), with no tolerance for variations.
# Getting Started — Search
Source: https://docs.fullenrich.com/api/v2/general/intro-search
Identify the right contacts and companies to engage
Unlike the Enrich API, the Search API is **synchronous**. This means that when you make a search request, the API responds immediately with the matching contacts or companies, based on the filters you provide in the request body.
There are two main endpoints:
* **/people/search** for searching contacts
* **/company/search** for searching companies
Both endpoints accept a wide range of filters (string filters, ranges, exact matches, etc.) so you can build highly targeted searches. Pagination is handled through the offset and limit parameters, which you can use to loop through larger result sets.
All requests require authentication via a Bearer token in the Authorization header. If you haven't set that up yet, check the **Authentication** section first.
Once you're ready, pick the relevant endpoint, define your filters, and send a POST request to start searching.
### Ready to use the API?
To make secure API Calls
Find your first contacts
Find your first companies
How filtering works: AND / OR, exact match, etc..
# API Overview
Source: https://docs.fullenrich.com/api/v2/general/introduction
👋 Welcome to FullEnrich API Documentation
## What is FullEnrich?
We are not just "another data vendor" — we aggregate data from more than 20 providers to achieve the highest enrichment rate in the market.
Get your API key by signing up for FullEnrich for free.
**FullEnrich offers 3 types of APIs:**
1. **Enrich API:** \
Find contact information of people you want to reach out.\
**Data provided:**
* Mobile phone number
* Work email
* Personal email
* Person's professional details (work history, location, education, etc.)
* Company lite details (location, industry, etc.)
2. **Reverse Email Lookup:** \
Identify the person and company behind an email address.\
**Data provided:**
* Full person profile (name, job title, location, work history, etc.)
* Company details (name, industry, headcount, etc.)
3. **Search API:** \
Search for new contacts or companies to reach out to.\
**Data provided:**
* **Contact Search:** Professional details (work history, location, education, etc.) and company lite details (location, industry, etc.)
* **Company Search:** Full company details
*You can also use the Search API to enrich a specific contact or company with the data listed above, without needing a phone number or email.*
Enrich contacts with mobile phone, work email or personal email
Identify the person behind an email
Find contacts & companies by filters
## Native Integrations (no-code)
If you prefer to use FullEnrich in your workflow without writing a line of code, we've got you covered.
**All of them will ask for your FullEnrich API key that** [you can find here](https://app.fullenrich.com/app/api)**.**
Enrich contacts in your Zapier workflow
Enrich contacts in your Make workflow
Enrich contacts natively in Clay using your FullEnrich API key
Enrich contacts in your n8n workflow
## Implementing FullEnrich in your product?
Join dozens of leading B2B platforms; including SalesTech, HRTech, AI agent tools, and other SaaS products, that have integrated FullEnrich directly into their product experience.\
Check out our implementation guide for:
* best practices
* technical insights
* and tips to deliver high-quality enrichment to your users.
# Rate Limit
Source: https://docs.fullenrich.com/api/v2/general/ratelimit
* The API rate limit is **60 API calls per minute**. This applies to all API endpoints: Enrich, Reverse Email Lookup, and Search.
* For Enrich and Reverse Email Lookup, you can send up to **100 contacts in one bulk**, allowing you to process up to **6,000 contacts per minute**.
* Each workspace has a default queue size of **100 concurrent enrichments** and **100 concurrent reverse email lookups**.
* *The Search API is synchronous and does not use a queue.*
***
If you're a technology partner and want to increase your rate limit or the queue size (number of contacts handled in parallel), feel free to reach out to us.
# How Webhooks Work
Source: https://docs.fullenrich.com/api/v2/general/webhooks
The recommended way to receive enrichment results
If you're using **Zapier, Make, Clay, or n8n**, webhooks are handled automatically by these platforms. You can skip this section.
The Enrich API and Reverse Email Lookup are **asynchronous**. This means when you start an operation, the API returns immediately with an ID, and results are delivered later via webhook.
## Why Webhooks?
Webhooks are notifications sent directly to your server when results are ready. Instead of you having to check for results, we push them to you immediately.
**Benefits:**
* **Fastest method** to receive results
* No need to keep a connection open
* No HTTP timeouts or retries to manage
* Simpler and more reliable than polling
## How It Works
1. When you start an enrichment or reverse lookup, include a `webhook_url` in your request
2. We process your contacts (typically 30-90 seconds per contact)
3. When done, we POST the results directly to your webhook URL
The content sent to your webhook is the same as what you'd get from the GET endpoint.
## Webhook Parameters
### `webhook_url` — Batch Completion
Your webhook URL receives a POST request when the **entire batch** is finished, lacks credits, or is canceled.
```json theme={null}
{
"name": "My Enrichment",
"webhook_url": "https://your-server.com/webhook",
"data": [...]
}
```
## Verifying Webhook Authenticity
Every webhook we send is signed so you can confirm it genuinely comes from FullEnrich and wasn't tampered with in transit. We include an `X-Signature-SHA1` header on each request — an HMAC-SHA1 signature of the request body, using your FullEnrich API key as the secret.
To verify a webhook:
1. **Get the signature** — read the `X-Signature-SHA1` value from the request headers.
2. **Read the raw body** — use the raw request body bytes exactly as received (UTF-8). Don't re-serialize the parsed JSON, as key ordering or whitespace changes will break the check.
3. **Compute the HMAC** — create an HMAC-SHA1 hash of the body using your API key as the secret, and hex-encode the result (lowercase).
4. **Compare** — if your computed hash matches the `X-Signature-SHA1` header, the request is authentic. Use a constant-time comparison to avoid timing attacks.
Verify the signature against the **raw request body**, before any JSON parsing or reformatting. Signing a re-serialized payload will produce a different hash and fail the check.
```javascript Node.js theme={null}
import crypto from "crypto";
// Use the raw request body (e.g. via express.raw({ type: "application/json" }))
function isValidWebhook(rawBody, signatureHeader, apiKey) {
const expected = crypto
.createHmac("sha1", apiKey)
.update(rawBody, "utf8")
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signatureHeader)
);
}
app.post("/webhook", express.raw({ type: "application/json" }), (req, res) => {
const signature = req.header("X-Signature-SHA1");
if (!isValidWebhook(req.body, signature, process.env.FULLENRICH_API_KEY)) {
return res.status(401).send("Invalid signature");
}
const payload = JSON.parse(req.body);
// ... handle the verified payload
res.sendStatus(200);
});
```
```python Python theme={null}
import hashlib
import hmac
def is_valid_webhook(raw_body: bytes, signature_header: str, api_key: str) -> bool:
expected = hmac.new(
api_key.encode("utf-8"),
raw_body,
hashlib.sha1,
).hexdigest()
return hmac.compare_digest(expected, signature_header)
# Flask example
@app.route("/webhook", methods=["POST"])
def webhook():
signature = request.headers.get("X-Signature-SHA1", "")
if not is_valid_webhook(request.get_data(), signature, API_KEY):
return "Invalid signature", 401
payload = request.get_json()
# ... handle the verified payload
return "", 200
```
```php PHP theme={null}
## Reliability & Retries
Webhooks are reliable by design. If we can't deliver your result (for example, receiving a non-2xx status code), we'll automatically **retry every minute, up to 5 times**.
For most use cases, you can treat webhooks as "guaranteed delivery." If there's ever a question about a specific result or missed event, our team can check our delivery logs on request.
## Tracking Requests with `custom`
You can easily keep track of which result belongs to which user or request by using the `custom` parameter. Include any identifier you need (User ID, CRM contact ID, etc.), and it will be returned exactly as provided in the webhook payload.
```json theme={null}
{
"data": [
{
"first_name": "John",
"last_name": "Doe",
"domain": "example.com",
"custom": {
"user_id": "12584",
"crm_contact_id": "abc-123"
}
}
]
}
```
Custom field values must be strings. Numbers will return an error.
## Testing Webhooks
A quick way to test webhooks and see the payload structure is to use [**webhook.site**](https://webhook.site) — a free service that gives you a temporary URL to receive and inspect webhook requests.
## Polling (Not Recommended)
Polling means repeatedly calling the GET endpoint to check if the operation is finished. This is **not recommended** because:
* It consumes your rate limit quota
* Results come slower than with webhooks
* More complex to implement reliably
If you must use polling, don't poll more than once every 5-10 minutes. Never poll every few seconds.
## Real-Time Webhook Events
### `webhook_events.contact_finished`
If you need results as fast as possible, use this parameter. It fires a webhook **immediately after each individual contact** is enriched, without waiting for the entire batch to complete.
This is perfect for real-time integrations where you want to process results as they come in.
```json theme={null}
{
"name": "My Enrichment",
"webhook_url": "https://your-server.com/webhook/batch-complete",
"webhook_events": {
"contact_finished": "https://your-server.com/webhook/single-contact"
},
"data": [...]
}
```
You can use both `webhook_url` and `webhook_events.contact_finished` together. You'll receive a webhook for each contact as it completes, plus a final webhook when the entire batch is done.
### Event Payload
The webhook receives the enriched profile immediately after processing. The payload follows the standard response format with a single contact in the `data` array:
```json theme={null}
{
"id": "",
"name": "",
"status": "IN_PROGRESS",
"cost": {
"credits": 10
},
"data": [
{
"input": {
"first_name": "",
"last_name": "",
"full_name": "",
"company_domain": "",
"company_name": "",
"professional_network_url": ""
},
"custom": {},
"contact_info": {
"most_probable_work_email": {
"email": "",
"status": "DELIVERABLE"
},
"most_probable_personal_email": {
"email": "",
"status": "DELIVERABLE"
},
"most_probable_phone": {
"number": "",
"region": ""
},
"work_emails": [
{
"email": "",
"status": "DELIVERABLE"
}
],
"personal_emails": [
{
"email": "",
"status": "DELIVERABLE"
}
],
"phones": [
{
"number": "",
"region": ""
}
]
},
"profile": {
"id": "",
"full_name": "",
"first_name": "",
"last_name": "",
"headline": "",
"description": "",
"location": {
"country": "",
"country_code": "",
"city": "",
"region": ""
},
"social_profiles": { ... },
"educations": [{ ... }],
"languages": [{ ... }],
"skills": [""],
"employment": { ... }
}
}
]
}
```
The `status` will be `IN_PROGRESS` since individual contacts are sent as they complete, before the entire batch finishes.
# Getting Started & Concepts
Source: https://docs.fullenrich.com/api/v2/implement-in-product/getting-started
Our API is also built for companies that want to integrate FullEnrich directly into their own product. If that's your goal, you're in the right place.
## Introduction
FullEnrich is designed to help you enrich contacts, identify people from emails, and search for contacts & companies at scale, using data from more than 20 providers with a strong focus on quality and coverage.
**FullEnrich offers 3 types of APIs:**
* **Enrich API** (asynchronous) — Find emails and phone numbers for B2B contacts
* **Reverse Email Lookup** (asynchronous) — Identify the person and company behind an email address
* **Search API** (synchronous) — Search for contacts and companies based on filters
The Enrich and Reverse Email Lookup APIs are asynchronous: you send requests and receive results via webhooks as soon as they're ready. The Search API is synchronous and returns results immediately.
### API Endpoint Reference
All technical details, request/response payloads, and code snippets are available in our API documentation.
Always refer to the main documentation for up-to-date specs.
## Asynchronous Model & Result Retrieval
*This section applies to the Enrich API and Reverse Email Lookup. The Search API is synchronous and returns results immediately.*
All enrichment and reverse lookup requests are asynchronous. You send the request, and results are available as soon as they're ready. Most operations take between 30 and 90 seconds, depending on provider response time.
**2 Ways to Get Your Results:**
### **1. Webhooks (Recommended - Fastest Method)**
Webhooks are notifications sent directly to your server when results are ready. Instead of you having to check for results, we push them to you immediately (fastest way to get enrichment results).
FullEnrich is designed for asynchronous usage, and webhooks are the only recommended way to receive enrichment results. When your enrichment is done, we POST the result directly to the webhook URL you provide. This means you don't have to keep a connection open or handle HTTP timeouts, retries, or connection errors. For most product teams, this is both simpler, faster, and much more reliable than managing long-running requests yourself.
Webhooks are reliable by design. If, for any reason, we can't deliver your result (for example, a network issue on your server), we'll automatically retry delivery 5 times. For most use cases, you can treat webhooks as "guaranteed delivery." If there's ever a question about a specific result or missed event, our team can check our delivery logs on request.
**Easy webhook implementation:** You can easily keep track of which enrichment belongs to which user or request by using the `custom` parameter when creating an enrichment. For example, you can include a User ID, Enrichment ID, or any other value that helps you match the result to your internal data. This value will be sent back to you exactly as provided, inside the `custom` object in the webhook payload.
Example usage:
```json theme={null}
"custom": {
"user_id": "12584"
}
```
A quick way to check the result payload and troubleshoot is to use a webhook URL from [webhook.site](http://webhook.site).
### **2. Polling (Not Recommended)**
Polling means repeatedly checking an endpoint to see if the enrichment is finished. This method requires you to actively check for results at regular intervals.
Polling is not encouraged because it will consume your rate limit quota without benefit. If you have to implement polling, we recommend not polling more than once every 5–10 minutes. Never poll every few seconds.
***
### **Queue Retention**
There's no limit on the number of queued contacts or how long they can stay in the queue. Once a contact is queued for enrichment, it remains there until it's processed. Jobs don't expire and there's no automatic timeout. If a provider in our waterfall is down, the system will automatically skip it and move on to the next one, ensuring very high uptime: [**https://status.fullenrich.com/**](https://status.fullenrich.com/)
# Deploying in Production
Source: https://docs.fullenrich.com/api/v2/implement-in-product/production
### Handling invalid input data
When using the bulk enrichment endpoint (`/api/v2/contact/enrich/bulk`), you can add the `silentFail` query parameter:
```
/api/v2/contact/enrich/bulk?silentFail=true
```
With this parameter, if a contact in your batch has invalid or missing data (LinkedIn URL, domain, name, etc.), that contact will simply be skipped during enrichment. The rest of the batch will be processed as usual.
This prevents a single invalid contact from blocking the enrichment of your entire batch. FullEnrich will handle these cases automatically and silently skip problematic contacts.
### Setting Up Low-Credit Alerts
You can set up a low credit alert directly from your FullEnrich dashboard to avoid running out of credits and blocking new operations.
It's in the settings of the webapp:
We recommend enabling this alert for production use to stay notified before your credits run out and keep your enrichment workflow running smoothly.
# Quality Over Speed
Source: https://docs.fullenrich.com/api/v2/implement-in-product/quality-over-speed
**A quick clarification before we dive in.**
When we talk about enrichment speed here, we're referring to the time it takes to enrich a *single contact*, not to overall throughput or scale. FullEnrich is built to handle volume. Some of our customers enrich millions of contacts every month with us.
When you integrate FullEnrich's API, you'll notice enrichment takes around 45-60 seconds per contact. If you've tried other providers in the past and it took 5-15 seconds to get a result, this might feel long. So let's talk about what's actually happening during that time, and what you'd be giving up if we made it faster.
## The reality of B2B data enrichment
We reject over 30% of the data our providers return to us. The numbers are invalid, the emails bounce, the data simply doesn't pass our checks.
When you request a phone number, we're not just pulling it from a database and handing it to you. We're running a gauntlet of validations:
1. We query a provider and find a number
2. We check if the number is even valid (proper format, real carrier)
3. We verify if it's currently in service
4. We verify if it's a mobile phone (we exclude landlines)
5. We confirm the line actually belongs to your prospect, not their old company or a recycled number
If you want to take a deeper look at how we verify emails and phone numbers, check out the articles below.
When any of these checks fail, we start over with another provider. Then another. Sometimes we go through 5, 10, 15 sources before we find a number that passes every validation, or before we're confident enough to tell you there isn't one.
## What are the alternatives?
We could have built just another data provider. One that responds in 10 seconds. Here's what that would look like:
These providers work from large static databases. That phone number has been sitting there for 3 years. The query is fast precisely because there's no real work happening; just a simple database lookup.
The result? Lower coverage (because they only have what's in their database), uncertain quality (because data decays constantly), and ultimately, wasted time chasing dead numbers or wrong people.
That's not us. And it never will be.
The whole reason we built FullEnrich is because the status quo wasn't good enough. Most data providers deliver mediocre quality, and teams just accepted it as normal. We didn't want to be another one of those. The quality and coverage we're able to deliver today is a direct result of the process that takes that extra time.
## Why the best providers are the slowest
This is counterintuitive, but the providers with the highest quality data are often the slowest. They're doing real-time lookups, hitting live sources, running their own validations. A single provider might take 30 seconds to respond.
Now multiply that by the 15-20 providers we query in a waterfall. Even at 5 seconds each, that adds up. And some of those slow providers are irreplaceable; they have coverage no one else can match.
## We asked ourselves this question on day one
When we built FullEnrich, we had to decide: do we optimize for speed, or do we optimize for quality?
We chose quality.
Not because fast isn't appealing, but because we've seen what happens when enrichment prioritizes speed. Your CRM fills up with bad numbers. Your team burns hours on dead leads. Your deliverability tanks. The time you "saved" on enrichment costs you 10x in wasted effort downstream.
That said, our engineering team is constantly working to reduce enrichment time. We optimize provider selection, parallelize where we can, and we're willing to make trade-offs when they make sense. If an extra check would give us 0.2% more accuracy but add 30 seconds, we wouldn't implement it. But we'll never sacrifice the core validations that make our data reliable.
## How to communicate this to your users
Most enrichments complete within 30 to 90 seconds per contact (average is 56s). What matters most is the value users get from the enrichment. If your product communicates that you're sourcing data from many premium providers to guarantee the most complete and up-to-date information, users naturally accept the wait. The more transparent you are about the process, the more the waiting time feels justified.
**Best practices for integrating enrichment in your product:**
* **Don't block users during enrichment.** Let them continue their workflow while the enrichment runs in the background.
* **Display a clear status in the UI** so users know the process is ongoing.
* **Rotate between dynamic loading messages** to make the experience smoother:
* "Enrichment in progress…"
* "Searching across 20 data providers…"
* "Checking every corner…"
* "Digging deeper…"
The wait feels proportional to the value delivered. Good communication turns patience into a signal of thoroughness.
# Rate Limits & Volume
Source: https://docs.fullenrich.com/api/v2/implement-in-product/volume
### Rate Limit
The default rate limit is **60 requests per minute**. This applies to all API calls: Enrich, Reverse Email Lookup, and Search.
For Enrich and Reverse Email Lookup, you can send up to 100 contacts per request, allowing you to process up to 6,000 contacts per minute.
**Are you currently hitting the rate limit?**\
Make sure you’ve implemented webhooks properly, since polling also consumes rate limits. If you’re still hitting the limit, reach out to our team, and we can increase it if needed.
Our API uses a fixed window rate limiter. Each calendar minute has its own request counter: by default, you can make up to 60 requests per minute. The counter resets at the start of every new minute. This means you can use your full quota in a single burst, but once the limit is reached, further requests will be rejected until the next minute begins.
### Queue Size
Each workspace has a default queue size of:
* **100 concurrent enrichments** (Enrich API)
* **100 concurrent reverse email lookups** (Reverse Email Lookup API)
If you submit more contacts than your queue can handle, the extra contacts wait in the queue until a slot is free. As soon as a running operation finishes, the next one in the queue starts.
*The Search API is synchronous and does not use a queue.*
**Dedicated Workspaces for Different Workloads**
If your application mixes batch processing and real-time enrichment, we can isolate these flows into two separate workspaces. Each workspace runs on an independent queue, keeping your real-time calls fast even when your batch jobs ramp up.
**Need a higher queue size?**\
Queue size can be increased for high-volume customers and is set based on your volume in the commercial agreement. Reach out to our team to discuss.
### Real-Time Enrichment
If you need results as fast as possible (closest to real-time), use the `webhook_events.contact_finished` parameter when starting an enrichment. This webhook fires immediately after each individual contact is enriched, without waiting for the entire batch to complete.
This means you don't need to send one contact per request to get fast results — you can still batch multiple contacts together and receive a webhook for each one as soon as it's ready.
# Look Up People
Source: https://docs.fullenrich.com/api/v2/people/lookup/post
api/v2/reference/openapi.yml POST /people/lookup
Look up a single person using their identifiers (professional network URL/ID, or full name combined with a company identifier). Returns the best matching person.
The People Look Up endpoint returns a single person when you already know who you are looking for. Provide an identifier and the API matches the best corresponding profile.
The most reliable way to match a person is their **professional network URL or ID**. You can also look up by **full name combined with a company identifier** (domain, professional network URL, or professional network ID) to disambiguate the match.
The response has the same shape as [Search People](/api/v2/people/search/post), but always contains at most one person.
[Search API pricing](/api/v2/general/credit)
# Search People
Source: https://docs.fullenrich.com/api/v2/people/search/post
api/v2/reference/openapi.yml POST /people/search
Search for people based on various filters. Multiple filters within the same field are combined with AND logic.
The People Search endpoint lets you build precise **lists of individuals based** on role, seniority, skills, location, company attributes, and career history. You can combine multiple filters to narrow down exactly the profiles you are looking for, whether you are targeting new hires, decision-makers, or specific personas.
**How filters work (AND / OR)**
If you filter by job titles \["CEO", "CTO", "VP Sales"] and locations \["France", "United States"], the API returns results where the job title is any of CEO, CTO, or VP Sales, AND the location is either France or United States.
In other words, a result must satisfy at least one value in every filter category you specify.
Within a category, values act as OR: a result matches if it fits any of the values. Across categories, the logic is AND: a result must match all categories to be returned.
Once you're ready, pick the relevant endpoint, define your filters, and send a POST request to start searching.
**If you already know exactly who you want to retrieve**, you can also search for a specific person using their professional network URL, which is the most reliable way to match a single individual.
[Search API pricing](/api/v2/general/credit)
For a full list of supported filters and accepted values (industries, company types, seniority levels, etc.)
For a full list of supported filters and accepted values (industries, company types, seniority levels, etc.)