NAV
shell python

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

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
email 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 !