The Lightcast Classification APIs helps to understand the inconsistent occupations, postings and company data that are collected from different sources. It matches your occupations, postings, and company names against a standard library, so you can confidently compare and analyze your data in one consistent way. Whether you are processing a single record or uploading a large file, the API fits into your existing workflow without major changes.
Explore the use cases below to understand how Classification APIs can be applied in real-world scenarios.
Classify Occupations
Job titles and descriptions often vary widely across organizations, making it difficult to compare roles, analyze workforce data, or match candidates to positions consistently. The Classification API maps raw job titles and descriptions to standardized occupations in the Lightcast taxonomy.
When a request is submitted, the title and description are evaluated together and matched against the taxonomy, returning one or more possible occupation matches ranked by confidence. This allows you to resolve ambiguity across job postings and consistently represent roles using canonical IDs.
See the Classify to Occupations API reference for full request parameters and response details.
When to Use
- You have job titles or descriptions that need to be mapped to standard occupations
- You want to resolve ambiguous or internally defined job titles using context
- You are building workforce analytics that require consistent occupation data
Endpoint
https://classification.emsicloud.com/classifications/{release}/lot/classifySample Request
curl --request POST \
--url https://classification.emsicloud.com/classifications/release/lot/classify \
--header 'accept: application/json' \
--header 'authorization: Bearer xxxxxxxxxx' \
--header 'content-type: application/json' \
--data '
{
"title": "CCL Software Engineer II",
"description": "This is a sample job posting for a full-time Programmer. The position is remote; successful candidates will be able to work from home. Masters degree in computer science required. The salary starts at $70,000 per year. You should have 6 years of experience in software development, including 4 years using AWS cloud services. Our company offers great benefits like a 401K. Employees love to work for us.",
"limit": 5,
"fields": [
"level",
"id",
"name",
"parentId"
],
"inputLocale": "en-US"
}
'Sample Response
{
"data": [
{
"confidence": 1,
"concept": {
"id": "23171541",
"name": "Software Developer / Engineer",
"levelName": "specializedOccupation",
"level": 3,
"parentId": "231715"
}
}
],
"warnings": []
}Postings Classification
Job postings contain a wealth of structured and unstructured data, but extracting and standardizing that information across large volumes of postings is a significant challenge, that's where the Classification API analyzes a full job posting, including company, title, and body, and returns a comprehensive set of standardized attributes mapped to multiple taxonomies in a single request.
When a request is submitted, the posting context is evaluated across all requested output types, returning standardized identifiers and values for attributes such as occupation codes, skills, salary, employment type, and years of experience. This allows you to enrich raw job posting data with consistent, structured fields suitable for analytics, matching, and reporting.
See the Classify Job Postings API reference for full request parameters and response details.
When to Use
- You need to extract and standardize multiple attributes from a job posting in a single call
- You want to map postings to occupation frameworks such as SOC, O*NET, ISCO, LOT, or CANOC
- You need to parse salary, employment type, contract type, or experience requirements from unstructured text
Endpoint
https://classification.emsicloud.com/classifications/{release}/postings/classifySample Request
curl --request POST \
--url https://classification.emsicloud.com/classifications/release/postings/classify \
--header 'accept: application/json' \
--header 'authorization: Bearer xxxxxxxxxx' \
--header 'content-type: application/json' \
--data '
{
"context": {
"company": "Starpoint Solutions",
"title": "CCL Software Engineer II",
"body": "This is a sample job posting for a full-time Programmer. The salary starts at $70,000 per year. You should have 6 years of experience in software development, including 4 years using AWS cloud services. Our company offers great benefits like a 401K. Employees love to work for us."
},
"findConceptNames": false,
"outputs": [
"cip_standard",
"company",
"educationLevel",
"employmentType",
"contractType",
"internship",
"naics_standard",
"lot",
"canoc_lightcast",
"isco_standard",
"onet_standard",
"remoteType",
"salary",
"skill",
"soc_standard",
"soc_lightcast",
"title",
"yearsOfExperience"
]
}
'Sample Response
{
"data": {
"canoc_lightcast": {
"id": "21231"
},
"cip_standard": null,
"company": {
"id": "38076262",
"confidence": 1
},
"contractType": {
"provisionalId": "Permanent contract"
},
"educationLevel": [],
"employmentType": {
"provisionalId": "Full-time (> 32 hours)"
},
"internship": {
"isInternship": false
},
"isco_standard": {
"id": "2512"
},
"lot": {
"id": "23171541",
"confidence": 1
},
"naics_standard": {
"id": "541519"
},
"onet_standard": {
"id": "15-1252.00"
},
"remoteType": {
"provisionalId": "[None]"
},
"salary": {
"gte": 70000,
"lte": 70000,
"units": "USD",
"originalPeriodicity": "year"
},
"skill": [
{
"id": "ES43DB1E2DEC412F3A26",
"confidence": 1
},
{
"id": "KS120FG6YP8PQYYNQY9B",
"confidence": 0.9805825352668762
},
{
"id": "KS120L96KMYTDJ48NRSH",
"confidence": 0.6632477045059204
}
],
"soc_lightcast": {
"id": "15-1252"
},
"soc_standard": {
"id": "15-1252"
},
"title": {
"id": "ET6850661D6AE5FA86",
"confidence": 1
},
"yearsOfExperience": {
"gte": 6,
"lte": 6,
"units": "year"
}
},
"warnings": []
}Company Classification
Company names in real-world data are rarely consistent. Variations in spelling, legal suffixes, abbreviations, and informal names make it difficult to reliably identify and group companies across datasets. The API maps raw company name strings to standardized company records in the Lightcast taxonomy.
When a request is submitted, each term is evaluated and matched against the taxonomy, returning one or more possible company matches ranked by confidence. Each match includes enriched metadata such as NAICS industry codes, website, and flags indicating whether the company is a staffing firm or a Fortune 1000 member.
This allows you to resolve naming inconsistencies and represent companies using canonical identifiers suitable for analytics and matching.
See the Company Normalization API reference for full request parameters and response details.
When to Use
- You have company names sourced from user input, resumes, or job postings that need to be standardized
- You need to deduplicate or group records by employer across large datasets
- You want to enrich company data with industry codes, websites, or firmographic flags
Endpoint
https://classification.emsicloud.com/classifications/{release}/companies/normalizeSample Request
curl --request POST \
--url https://classification.emsicloud.com/classifications/release/companies/normalize \
--header 'accept: application/json' \
--header 'authorization: Bearer xxxxxxxxxx' \
--header 'content-type: application/json' \
--data '
{
"terms": [
"Amazon",
"Alphabet Inc.",
"Wal-Mart"
],
"fields": [
"id",
"name",
"naics6",
"website",
"isStaffing",
"isFortune1000"
],
"limit": 3,
"confidenceThreshold": 0.8
}
'Sample Response
{
"data": [
{
"term": "Amazon",
"count": 3,
"results": [
{
"confidence": 1,
"concept": {
"id": "20",
"name": "Amazon",
"levelName": "topLevelCompany",
"naics6": "454110",
"website": "https://www.amazon.com/",
"isStaffing": false,
"isFortune1000": true
}
},
{
"confidence": 0.9,
"concept": {
"id": "101875525",
"name": "Maax Ies ®",
"levelName": "topLevelCompany",
"naics6": null,
"website": null,
"isStaffing": null,
"isFortune1000": null
}
},
{
"confidence": 0.7379539439578645,
"concept": {
"id": "60558122",
"name": "Amazon.com Services LLC / Amazon.com Services LLC - Okc5",
"levelName": "topLevelCompany",
"naics6": "493110",
"website": null,
"isStaffing": null,
"isFortune1000": null
}
}
]
},
{
"term": "Alphabet Inc.",
"count": 3,
"results": [
{
"confidence": 1,
"concept": {
"id": "9383998",
"name": "Alphabet",
"levelName": "topLevelCompany",
"naics6": "541511",
"website": "https://www.abc.xyz/",
"isStaffing": false,
"isFortune1000": true
}
},
{
"confidence": 0.9,
"concept": {
"id": "61150251",
"name": "Alphabet Gang-alphabet Gang",
"levelName": "topLevelCompany",
"naics6": null,
"website": null,
"isStaffing": null,
"isFortune1000": null
}
},
{
"confidence": 0.7811746971856585,
"concept": {
"id": "91890868",
"name": "App Mario Alphabet - Alphabet App",
"levelName": "topLevelCompany",
"naics6": null,
"website": "https://www.appalphabet.com/",
"isStaffing": null,
"isFortune1000": null
}
}
]
},
{
"term": "Wal-Mart",
"count": 3,
"results": [
{
"confidence": 1,
"concept": {
"id": "36704772",
"name": "Walmart",
"levelName": "topLevelCompany",
"naics6": "452210",
"website": "https://www.walmart.com/",
"isStaffing": false,
"isFortune1000": true
}
},
{
"confidence": 1,
"concept": {
"id": "41541381",
"name": "Wal-mart Stores Texas",
"levelName": "topLevelCompany",
"naics6": "452319",
"website": null,
"isStaffing": null,
"isFortune1000": null
}
},
{
"confidence": 0.9,
"concept": {
"id": "97913886",
"name": "Wal*Mart Corporation",
"levelName": "topLevelCompany",
"naics6": "452311",
"website": null,
"isStaffing": null,
"isFortune1000": null
}
}
]
}
],
"warnings": []
}Bulk Company Normalization
When working with large volumes of company name data, submitting terms one batch at a time can be impractical. This API accepts a file containing company name strings and returns standardized company matches from the Lightcast taxonomy, making it well-suited for bulk normalization workflows.
When a file is submitted, each company name in the file is evaluated and matched against the taxonomy, returning one or more ranked results per term. A confidence threshold parameter allows you to control the minimum match quality returned, filtering out low-confidence results before they reach your pipeline.
See the Normalize Companies from File API reference for full request parameters and response details.
When to Use
- You need to normalize a large list of company names in a single request
- You want to avoid repeated API calls by uploading all company terms at once
- You need to standardize employer data as part of a batch ingestion or ETL pipeline
Endpoint
https://classification.emsicloud.com/classifications/{release}/companies/normalize/fileSample Request
curl --request POST \
--url 'https://classification.emsicloud.com/classifications/release/companies/normalize/file?confidence_threshold=0.5' \
--header 'accept: application/json' \
--header 'authorization: Bearer xxxxxxxx' \
--header 'content-type: multipart/form-data' \
--form fileUpload=stringSample Response
{
"data": [
{
"term": "Amazon",
"count": 5,
"results": [
{
"confidence": 1,
"concept": {
"id": "20",
"name": "Amazon",
"levelName": "topLevelCompany",
"level": 0
}
},
{
"confidence": 0.9,
"concept": {
"id": "101875525",
"name": "Maax Ies ®",
"levelName": "topLevelCompany",
"level": 0
}
},
{
"confidence": 0.7379539439578645,
"concept": {
"id": "60558122",
"name": "Amazon.com Services LLC / Amazon.com Services LLC - Okc5",
"levelName": "topLevelCompany",
"level": 0
}
},
{
"confidence": 0.7379539439578645,
"concept": {
"id": "62525454",
"name": "Amazon.com Services LLC / Amazon.com Services LLC - Okc1",
"levelName": "topLevelCompany",
"level": 0
}
},
{
"confidence": 0.7379539439578645,
"concept": {
"id": "63449815",
"name": "Amazon.com Services LLC / Amazon.com Services LLC Dok4",
"levelName": "topLevelCompany",
"level": 0
}
}
]
},
{
"term": "Alphabet Inc.",
"count": 5,
"results": [
{
"confidence": 1,
"concept": {
"id": "9383998",
"name": "Alphabet",
"levelName": "topLevelCompany",
"level": 0
}
},
{
"confidence": 0.9,
"concept": {
"id": "61150251",
"name": "Alphabet Gang-alphabet Gang",
"levelName": "topLevelCompany",
"level": 0
}
},
{
"confidence": 0.7811746971856585,
"concept": {
"id": "91890868",
"name": "App Mario Alphabet - Alphabet App",
"levelName": "topLevelCompany",
"level": 0
}
},
{
"confidence": 0.7786465530787453,
"concept": {
"id": "37712425",
"name": "Alphabet Alley",
"levelName": "topLevelCompany",
"level": 0
}
},
{
"confidence": 0.7786465530787453,
"concept": {
"id": "38413520",
"name": "Alphabet Club",
"levelName": "topLevelCompany",
"level": 0
}
}
]
},
{
"term": "Wal-Mart",
"count": 5,
"results": [
{
"confidence": 1,
"concept": {
"id": "36704772",
"name": "Walmart",
"levelName": "topLevelCompany",
"level": 0
}
},
{
"confidence": 1,
"concept": {
"id": "41541381",
"name": "Wal-mart Stores Texas",
"levelName": "topLevelCompany",
"level": 0
}
},
{
"confidence": 0.9,
"concept": {
"id": "97913886",
"name": "Wal*Mart Corporation",
"levelName": "topLevelCompany",
"level": 0
}
},
{
"confidence": 0.7956340957479849,
"concept": {
"id": "61184902",
"name": "Wal-mart-treatment Plant - Wal-mart",
"levelName": "topLevelCompany",
"level": 0
}
},
{
"confidence": 0.7030269676937969,
"concept": {
"id": "62511949",
"name": "Wal-mart Stores, Inc. Wal-mart Store 1288",
"levelName": "topLevelCompany",
"level": 0
}
}
]
}
],
"warnings": []
}
