How to fetch job application data from ADP Workforce Now ATS API

Introduction

If you're building hiring workflows, analytics dashboards, or HR automations, pulling data directly from the ADP Workforce Now ATS API is a non-negotiable capability. This guide cuts past the fluff and gets straight to how you can fetch job application data reliably, securely, and at scale.

This article is part of a broader series on the ATS API, including deep dives on authentication, rate limits, pagination, and best practices. You can explore the complete guide here.

Prerequisites

Before you start calling the API, make sure you have:

  • Valid OAuth 2.0 credentials (Client ID + Client Secret)
  • Understanding of REST and JSON structures
  • A Python environment with requests installed

Useful Endpoints

  • Get all job applications → /staffing/v2/job-applications
  • Get a specific application → /staffing/v2/job-applications/{job-application-id}

Step-by-Step Guide

1. Generate an OAuth 2.0 Token

import requests

def get_oauth_token(client_id, client_secret):
    url = 'https://auth.adp.com/oauth/v2/token'
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    data = {'grant_type': 'client_credentials'}
    response = requests.post(url, headers=headers, data=data, auth=(client_id, client_secret))
    return response.json().get('access_token')

2. Fetch All Job Applications

def get_all_job_applications(token):
    url = 'https://api.adp.com/staffing/v2/job-applications'
    headers = {
        'Authorization': f'Bearer {token}',
        'Content-Type': 'application/json',
        'roleCode': 'practitioner'
    }
    params = {'$select': 'itemID,jobRequisitionReference,applicationStatusCode'}
    response = requests.get(url, headers=headers, params=params)
    return response.json()

3. Fetch a Single Job Application

def get_job_application(token, job_application_id):
    url = f'https://api.adp.com/staffing/v2/job-applications/{job_application_id}'
    headers = {
        'Authorization': f'Bearer {token}',
        'Content-Type': 'application/json',
        'roleCode': 'practitioner'
    }
    response = requests.get(url, headers=headers)
    return response.json()

Common Pitfalls

Developers integrating ADP Workforce Now often trip over the same issues. Keep these in check:

1. Token expiry sneaking up on you
ADP tokens expire quickly; build auto-refresh into your workflow.

2. Missing or incorrect roleCode
This header is mandatory and impacts what data you can see.

3. Pagination confusion
ADP won’t return everything in one shot, use $top and $skip.

4. Throttling during bulk fetches
ADP rate limits aggressively. Queue/batch your requests.

5. Complex nested JSON
Prepare to map multi-level objects; flattening the response helps.

6. Environment mismatches
ADP sandbox and production behave differently, test both.

7. Silent permission failures
Sometimes the API returns fewer fields simply because your role doesn’t have access.

FAQs

1. Why do I need the roleCode header?
It determines your access level and controls which data fields ADP exposes.

2. Can I filter the job applications?
Yes. Use $filter, $select, $orderby, and other OData-style parameters.

3. What format does the API return?
All responses are JSON, often with deeply nested structures.

4. Is there a limit on how many applications I can fetch at once?
Yes. Use $top for batch size and $skip for pagination.

5. How do I handle ADP rate limits?
Implement retries with exponential backoff and stagger API calls.

6. Does ADP provide historical application data?
Only if your org's data retention settings allow it.

7. How do I debug API errors more effectively?
Check status codes, error objects, and verify your scopes + permissions.

Knit: Faster ADP Workforce Now ATS Integration

Connecting directly to ADP Workforce Now ATS API often becomes a maintenance-heavy project, OAuth rotation, permission handling, schema changes, and rate limits add real engineering drag. Knit removes this overhead. A single integration gives you:

  • Clean, unified ADP Workforce Now ATS data
  • Automated token refresh + authentication
  • Continuous schema maintenance
  • Built-in monitoring and retries
  • Zero upkeep on your side

#1 in Ease of Integrations

Trusted by businesses to streamline and simplify integrations seamlessly with GetKnit.