Introduction
This documentation will take you through XingZap's search API.
All you need to get started is a search URL or the field map via the /fields
route given in this doc.
You can get request an access key by filling this form !
Xing and limitations
XingZap simply automates what you would be able to do on Xing.
According to Xing's Terms of Service, Xing only returns 300 results per search at maximum. See more details here.
Here's an article posted on our blog to help you overcome this limit.
Moreover, XingZap mines Xing everytime a search is made, no data is kept in databases to respect GDPR regulation. For this reason, a search can take up to 30s.
Rate limit
- 1 call/second
- Monthly quota is defined upon invoicing. Contact sales to increase your quota.
Authentication
All the requests should be authenticated with the X-Api-Key header:
import requests
response = requests.post("https://prod.api.xingzap.com/v1/scrap",
json={
"keywords":"Head of sales",
"languageFilter":["German"]
},
headers= {
'X-Api-Key':'XINGZAP_API_KEY'
}
)
# With shell, you can just pass the correct header with each request
curl --location --request POST 'https://prod.api.xingzap.com/v1/scrap' \
-H 'X-Api-Key: XINGZAP_API_KEY'
--data-raw '{
"keywords":"Head of sales",
"languageFilter":["German"]
}'
Make sure to replace
XINGZAP_API_KEY
with your API key.
You can get a test key by filling our access request form..
XingZap expects for the API key to be included in all API requests to the server in a header that looks like the following:
X-Api-Key: XINGZAP_API_KEY
Scrap
Get scrapable fields
Get all the available searchable Xing fields to use on /scrap
To use a given filter or field, pass the search_parameter
value as parameter in your /scrap
request.
The type of each field indicate whether you should pass a string or an array when using /scrap
.
When using arrays, make sure to strictly use values present in the respective possible_values
.
The fields are scraped regularly to make sure they're up to date.
HTTP Request
GET https://prod.api.xingzap.com/v1/scrap/fields
import requests
response = requests.get("https://prod.api.xingzap.com/v1/scrap/fields",
headers= {
'X-Api-Key':'XINGZAP_API_KEY'
}
)
curl --location --request GET "https://prod.api.xingzap.com/v1/scrap/fields" \
-H "X-Api-Key: XINGZAP_API_KEY"
The above command returns the current version of the fields, their usable
search_parameter
names and their values:
[
{
"field_name": "Search",
"search_parameter": "keywords",
"type": "text"
},
{
"field_name": "Name",
"search_parameter": "name",
"type": "text"
},
{
"field_name": "Company",
"search_parameter": "company",
"type": "text"
},
{
"field_name": "Position",
"search_parameter": "title",
"type": "text"
},
{
"field_name": "Company (previous)",
"search_parameter": "previousCompany",
"type": "text"
},
{
"field_name": "Position (previous)",
"search_parameter": "previousTitle",
"type": "text"
},
{
"field_name": "Skills",
"search_parameter": "haves",
"type": "text"
},
{
"field_name": "City",
"search_parameter": "city",
"type": "text"
},
{
"field_name": "University",
"search_parameter": "education",
"type": "text"
},
{
"field_name": "Discipline",
"search_parameter": "disciplineFilter",
"type": "array",
"possible_values": [
"Analysis and statistics",
"Administration",
"Consulting",
"Customer service",
"Purchasing, materials management & logistics",
"Finance, accounting & controlling",
"Teaching, R&D",
"Health, medical and social",
"Graphic design and architecture",
"Engineering and technical",
"IT and software development",
"Management and corporate development",
"Marketing and advertising",
"HR",
"PR and journalism",
"Production and manufacturing",
"Product management",
"Project management",
"Process planning & QA",
"Legal",
"Sales and commerce",
"Other"
]
},
{
"field_name": "Industry",
"search_parameter": "industryFilter",
"type": "array",
"possible_values": [
"Architecture and planning",
"Automotive and vehicle manufacturing",
"Banking and financial services",
"Consulting",
"Energy, water and environment",
"Education and science",
"Health and social",
"Real Estate",
"Industry and mechanical engineering",
"Internet and IT",
"Consumer goods and trade",
"Art, culture and sport",
"Marketing, PR and design",
"Media and publishing",
"Civil service, associations and institutions",
"HR services",
"Medical services",
"Telecommunication",
"Tourism and food service",
"Transport and logistics",
"Insurance",
"Auditing, tax and law",
"Other industries"
]
},
{
"field_name": "Career level",
"search_parameter": "levelFilter",
"type": "array",
"possible_values": [
"Professional/Experienced",
"Manager",
"Executive",
"Senior",
"Entry",
"Student/Intern"
]
},
{
"field_name": "Employment type",
"search_parameter": "currentStatusCodeFilter",
"type": "array",
"possible_values": [
"Full time employee",
"Self employed",
"Owner",
"Part time employee",
"Partner",
"Intern",
"Volunteer",
"Board member",
"Recruiter",
"Civil servant"
]
},
{
"field_name": "Language",
"search_parameter": "languageFilter",
"type": "array",
"possible_values": [
"English",
"German",
"French",
"Spanish",
"Italian",
"Russian",
"Turkish",
"Chinese",
"Arabic",
"Dutch"
]
},
{
"field_name": "Country",
"search_parameter": "countryFilter",
"type": "array",
"possible_values": [
"Austria",
"China",
"Germany",
"India",
"Italy",
"Spain",
"Switzerland",
"Turkey",
"United Kingdom",
"United States of America"
]
}
]
Get Xing leads
Search for highly targeted Xing leads in one call.
HTTP Request
POST https://prod.api.xingzap.com/v1/scrap
A request using only keywords
import requests
response = requests.post("https://prod.api.xingzap.com/v1/scrap",
json={
"keywords":"Head of sales",
"languageFilter":["German"],
"raw":True
},
headers= {
'X-Api-Key':'XINGZAP_API_KEY'
}
)
curl --location --request POST 'https://prod.api.xingzap.com/v1/scrap' \
-H 'X-Api-Key: XINGZAP_API_KEY'
--data-raw '{
"keywords":"Head of sales",
"languageFilter":["German"],
"raw":true
}'
The first 2 results are as follow:
[
{
"cursor": "TWVtYmVyc1NlYXJjaENvbm5lY3Rpb24tLS0w",
"node": {
"xingId": {
"id": "35511063.e8307c",
"displayName": "Harish Govindarajalu",
"displayFlag": "BASIC",
"location": {
"displayLocation": "**Paris**, France"
},
"profileOccupation": {
"occupationOrg": "Apar Technologies"
},
"occupations": [
{
"category": "WORK_EXPERIENCE",
"summary": "Employee, **Strategic Business Analyst**, Apar Technologies",
"links": null
}
],
"pageName": "Harish_Govindarajalu2",
"profileImage": [
{
"url": "https://profile-images.xing.com/images/086571beee8ceaa22208b3f08b08e92a-5/harish-govindarajalu.64x64.jpg"
},
{
"url": "https://profile-images.xing.com/images/086571beee8ceaa22208b3f08b08e92a-5/harish-govindarajalu.96x96.jpg"
}
]
},
"highlight": {
"interests": null,
"wants": null,
"currentTitle": null,
"previousTitle": null,
"haves": null,
"currentCompany": null,
"education": null,
"organizations": null,
"qualifications": null,
"awards": null,
"province": null,
"city": null,
"country": null,
"zipCode": null,
"currentNotes": null,
"previousCompany": null,
"portfolioTilesTitle": null,
"portfolioTilesPlainContent": null,
"currentIndustries": null,
"previousIndustries": null
},
"trackingToken": "a9a2a1f815be11ec8d2e12d592d816eb.0",
"position": 0,
"contains": null,
"missing": null,
"profileSkills": {
"topSkills": []
},
"sharedContacts": {
"total": 0
},
"contactsCount": {
"count": 2
},
"networkRelationship": {
"permissions": ["DELETE_CONTACT"]
},
"contactDistance": {
"distance": 1
}
}
},
{
"cursor": "TWVtYmVyc1NlYXJjaENvbm5lY3Rpb24tLS0x",
"node": {
"xingId": {
"id": "34834626.d2ff1d",
"displayName": "Dvir Lifshits",
"displayFlag": "BASIC",
"location": {
"displayLocation": "**Berlin**, Germany"
},
"profileOccupation": {
"occupationOrg": "Dvir Lifshits Online Marketing"
},
"occupations": [
{
"category": "WORK_EXPERIENCE",
"summary": "Owner, **Online Marketing & Growth Consultant - Hands-On Expert**, Dvir Lifshits Online Marketing",
"links": null
},
{
"category": "EDUCATION",
"summary": "Degree: **MBA**, Hebrew University of Jerusalem",
"links": null
}
],
"pageName": "Dvir_Lifshits",
"profileImage": [
{
"url": "https://profile-images.xing.com/images/dcf3abfaa458cf2e38b2007e206c1e8a-1/dvir-lifshits.64x64.jpg"
},
{
"url": "https://profile-images.xing.com/images/dcf3abfaa458cf2e38b2007e206c1e8a-1/dvir-lifshits.96x96.jpg"
}
]
},
"highlight": {
"interests": null,
"wants": null,
"currentTitle": [
"Online Marketing & **Growth** Consultant - Hands-On Expert"
],
"previousTitle": ["Acquisition/**Growth** Team Leader (Social)"],
"haves": null,
"currentCompany": null,
"education": null,
"organizations": null,
"qualifications": null,
"awards": null,
"province": null,
"city": null,
"country": null,
"zipCode": null,
"currentNotes": null,
"previousCompany": null,
"portfolioTilesTitle": null,
"portfolioTilesPlainContent": null,
"currentIndustries": null,
"previousIndustries": null
},
"trackingToken": "a9a2a1f815be11ec8d2e12d592d816eb.1",
"position": 1,
"contains": null,
"missing": null,
"profileSkills": {
"topSkills": []
},
"sharedContacts": {
"total": 1
},
"contactsCount": {
"count": 333
},
"networkRelationship": {
"permissions": ["DELETE_CONTACT"]
},
"contactDistance": {
"distance": 1
}
}
}
]
If you don't use the
raw
parameter, the last results look like this:
[
{
"firstName": "Harish",
"lastName": "Govindarajalu",
"fullName": "Harish Govindarajalu",
"title": "Strategic Business Analyst",
"location": "Berlin, Germany",
"previousTitle": "",
"company": "Apar Technologies",
"xingId": "35511063.e8307c",
"pageName": "Harish_Govindarajalu2"
},
{
"firstName": "Dvir",
"lastName": "Lifshits",
"fullName": "Dvir Lifshits",
"title": "Online Marketing & Growth Consultant - Hands-On Expert",
"location": "Berlin, Germany",
"previousTitle": "Acquisition/Growth Team Leader (Social)",
"company": "Dvir Lifshits Online Marketing",
"xingId": "34834626.d2ff1d",
"pageName": "Dvir_Lifshits"
}
]
A request using a searchUrl looks like this:
import requests
response = requests.post("https://prod.api.xingzap.com/v1/scrap",
json={
"searchUrl":"https://www.xing.com/search/members?keywords=anas%20el%20mhamdi"
},
headers= {
'X-Api-Key':'XINGZAP_API_KEY'
}
)
curl --location --request POST 'https://prod.api.xingzap.com/v1/scrap' \
-H 'X-Api-Key: XINGZAP_API_KEY'
--data-raw '{
"searchUrl":"https://www.xing.com/search/members?keywords=anas%20el%20mhamdi"
}'
Parameter | Required | Default | Description |
---|---|---|---|
keywords | One of keywords or searchUrl | Keywords to search for leads in Xing | |
searchUrl | One of keywords or searchUrl | Required if no other parameters are used. The search URL must contain the keywords query parameter. | |
raw | No | false | Set to true to get raw scraped data from Xing. |
any scrapable field | No | Any search_parameter from the /scrap/fields route |
Scrap a single profile
Scrapes the public information of a given pageName
or Xing profileUrl
.
HTTP Request
POST https://prod.api.xingzap.com/v1/scrap/page
import requests
response = requests.post("https://prod.api.xingzap.com/v1/scrap/page",
json={
"pageName":"Anas_ElMhamdi"
},
headers= {
'X-Api-Key':'XINGZAP_API_KEY'
}
)
curl --location --request POST 'https://prod.api.xingzap.com/v1/scrap' \
-H 'X-Api-Key: XINGZAP_API_KEY'
--data-raw '{
"pageName":"Anas_ElMhamdi"
}'
A request using a profileUrl looks like this:
import requests
response = requests.post("https://prod.api.xingzap.com/v1/scrap/page",
json={
"profileUrl":"https://www.xing.com/profile/Anas_ElMhamdi/cv"
},
headers= {
'X-Api-Key':'XINGZAP_API_KEY'
}
)
curl --location --request POST 'https://prod.api.xingzap.com/v1/scrap' \
-H 'X-Api-Key: XINGZAP_API_KEY'
--data-raw '{
"profileUrl":"https://www.xing.com/profile/Anas_ElMhamdi/cv"
}'
Request parameters
Parameter | Required | Description |
---|---|---|
pageName | One of pageName or profileUrl | The shorthand name for a Xing profile |
profileUrl | One of pageName or profileUrl | A Xing profile URL |
Response description
Response parameter | Description |
---|---|
fullName | The user's full name |
currentPosition | A list of the current positions held by the users |
workPositionTimeline | A list of all the positions held by the users |
description | the user's about section (if available) |
private | A boolean indicating the user's profile is private |
premiumProfile | A boolean indicating the user's profile is a user of Xing Premium |
profileImg | The user's Xing avatar |
xingUrl | The user's Xing URL |
The scraped data is sent in response:
{
"fullName": "Anas El Mhamdi",
"currentPosition": [
{
"jobtitle": "CEO",
"company": "XingZap",
"date": "8 months, since May 2021"
},
{
"jobtitle": "Growth Engineer",
"company": "Quable",
"date": "1 year and 3 months, since Oct 2020"
}
],
"workPositionTimeline": [
{
"jobtitle": "CEO",
"company": "XingZap",
"date": "8 months, since May 2021",
"startDate": "May 2021",
"endDate": null,
"daysInPosition": 240
},
{
"jobtitle": "Growth engineer",
"company": "Quable",
"date": "1 year and 3 months, since Oct 2020",
"startDate": "Oct 2020",
"endDate": null,
"daysInPosition": 452
}
],
"description": "I'm a growth engineer with a mission of making marketing exciting !\n\nI'm also the co-founder of XingZap, the only Xing automation tool of the market :)\n \nContact me for more information !",
"profileImg": "https://profile-images.xing.com/images/441458d2037e2bd7e33de0b693ef528d-1/anas-el-mhamdi.256x256.jpg",
"xingUrl": "https://xing.com/profile/Anas_ElMhamdi",
"private": false,
"premiumProfile": true
}
Scrap and enrich a profile
Scrapes the public information of a given pageName
or Xing profileUrl
and looks for that person's most recent company domain and valid email.
HTTP Request
POST https://prod.api.xingzap.com/v1/scrap/enrich
import requests
response = requests.post("https://prod.api.xingzap.com/v1/scrap/enrich",
json={
"pageName":"Anas_ElMhamdi"
},
headers= {
'X-Api-Key':'XINGZAP_API_KEY'
}
)
curl --location --request POST 'https://prod.api.xingzap.com/v1/scrap/enrich' \
-H 'X-Api-Key: XINGZAP_API_KEY'
--data-raw '{
"pageName":"Anas_ElMhamdi"
}'
A request using a profileUrl looks like this:
import requests
response = requests.post("https://prod.api.xingzap.com/v1/scrap/enrich",
json={
"profileUrl":"https://www.xing.com/profile/Anas_ElMhamdi/cv"
},
headers= {
'X-Api-Key':'XINGZAP_API_KEY'
}
)
curl --location --request POST 'https://prod.api.xingzap.com/v1/scrap/enrich' \
-H 'X-Api-Key: XINGZAP_API_KEY'
--data-raw '{
"profileUrl":"https://www.xing.com/profile/Anas_ElMhamdi/cv"
}'
Request parameters
Parameter | Required | Description |
---|---|---|
pageName | One of pageName or profileUrl | The shorthand name for a Xing profile |
profileUrl | One of pageName or profileUrl | A Xing profile URL |
Response description
Response parameter | Description |
---|---|
id | The request's id, mainly used for debug purposes |
pageName | The user's Xing pageName |
firstName | The user's first name |
lastName | The user's last name |
fullName | The user's full name |
title | The user's job title |
location | The user's city and country |
previousTitle | the user's previous job title (if available) |
company | The user's current company |
xingId | The user's unique Xing ID |
profileImgUrl | The user's Xing avatar |
The user's email address if found | |
validationStatus | The email validation status, one of valid, catch all, or empty |
companyDomain | The user's current company domain |
creditBalance | Your enrich credit balance |
The scraped data is sent in response:
{
"id": "d5d05a8c-3166-435e-84ff-8fb6fc0459b4",
"firstName": "Anas",
"lastName": "Mhamdi",
"fullName": "Anas El Mhamdi",
"title": "Growth Engineer",
"location": "Paris, France",
"previousTitle": "",
"company": "Quable",
"xingId": "40789552.f5e92c",
"pageName": "Anas_ElMhamdi",
"profileImgUrl": "https://profile-images.xing.com/images/441458d2037e2bd7e33de0b693ef528d-1/anas-el-mhamdi.96x96.jpg",
"email": "anas.elmhamdi@quable.fr",
"companyDomain": "quable.fr",
"validationStatus": "valid",
"creditBalance": 298
}
Usage monitoring
Fetches your remaining requests for the month and the date your subscription was first created.
HTTP Request
GET https://prod.api.xingzap.com/v1/billing
import requests
response = requests.get("https://prod.api.xingzap.com/v1/scrap/fields",
headers= {
'X-Api-Key':'XINGZAP_API_KEY'
}
)
curl --location --request GET "https://prod.api.xingzap.com/v1/scrap/fields" \
-H "X-Api-Key: XINGZAP_API_KEY"
Your usage is returned like this:
{
"Remaining requests this month": 487,
"Invoicing start date": "2021-09-13"
}
Errors
The XingZap API uses the following error codes:
Error Code | Meaning |
---|---|
400 | Bad Request -- Your request is invalid. |
403 | Forbidden -- The kitten requested is hidden for administrators only. |
429 | Too Many Requests -- You're exceeding the rate limit |
500 | Internal Server Error -- We had a problem with our server. Please contact us ! |