Skip to main content

Ashby

This page contains the setup guide and reference information for the Ashby source connector.

Prerequisites

  • An Ashby account
  • An Ashby API key with the appropriate permissions for the streams you want to sync. See the Ashby authentication docs for details on how to create an API key.

Your API key must have read permissions enabled for the modules that correspond to the streams you want to sync:

Ashby permission moduleStreams
Candidatesapplications, application_criteria_evaluations, application_history, candidates
Interviewsinterviews, interview_stages, interview_schedules
Jobsjobs, job_postings
Hiring Processarchive_reasons, candidate_tags, custom_fields, feedback_form_definitions, sources
Organization (always required)departments, locations, users — The connection check validates connectivity using the users stream, so you must enable this permission even if you only intend to sync streams from other modules. Without it, the check fails with a 403 missing_endpoint_permission error.
Offersoffers
note

The application_criteria_evaluations stream requires the AI Application Review feature to be enabled for your Ashby organization. If this feature is not enabled, the stream returns empty results.

Setup guide

  1. Log in to your Ashby account.
  2. Generate an API key following the Ashby authentication guide. Grant the API key read permissions for the modules listed in the prerequisites. At minimum, you must enable the Organization read permission (required for the connection check) plus read permissions for any additional modules whose streams you want to sync.
  3. In Airbyte, create a new Ashby source.
  4. Enter your API key.
  5. Enter a Start date in YYYY-MM-DDTHH:MM:SSZ format. The connector sends this date as the createdAfter filter on the applications and interview_schedules streams, so records created before it aren't replicated. The date also limits application_criteria_evaluations and application_history, because those streams read the same filtered application list to decide which applications to request child records for. All other streams ignore the start date and always return everything the API exposes.

Supported sync modes

FeatureSupported
Full RefreshYes
Incremental - AppendNo

Every sync re-reads each selected stream in full, subject to the start date where it applies. Many Ashby .list endpoints support incremental sync through a syncToken, but this connector doesn't use it.

Supported streams

This source syncs the following streams:

The application_criteria_evaluations stream is a substream of applications. The connector requests evaluations only for applications whose current interview stage has the type PreInterviewScreen and whose status is neither Archived nor Hired, so it doesn't cover every application in your account. Each record carries an application_id field copied from the parent application, which is how you join evaluations back to applications. This stream has no primary key, and the connector doesn't paginate the evaluations endpoint, so only the first page of evaluations is synced for each application.

The application_history stream is a full-refresh substream of applications. Each record is one interview stage an application entered, with the enteredStageAt and leftStageAt timestamps that no other Ashby endpoint exposes. Join application_history.application_id to applications.id and application_history.stageId to interview_stages.id. Along with application_id, the connector copies the parent application's status and creation timestamp into each record as application_status and application_created_at, so you can analyze stage timing without joining back to applications. The stream has a primary key of id, so deduplicating destinations key history events instead of appending a copy on every sync.

The parent application list uses the same createdAfter filter as the applications stream. A start date later than your oldest application returns partial history rather than an error.

The connector requests history one application at a time, and application.listHistory accepts neither a date filter nor a syncToken, so every sync re-reads the full history of every selected application. The connector also caps this endpoint at 100 requests per minute, which puts a floor on how long a sync can take: 10,000 applications need at least 100 minutes, and applications with more than 100 history records need additional requests to paginate. Sync this stream on its own connection with an infrequent schedule rather than alongside the other streams.

If Ashby returns an application_not_found error for an application, which happens when the application is deleted or your API key can't access it, the connector skips that application's history, logs the Ashby request ID, and continues. It retries HTTP 429 and 5xx responses. Any other error fails the sync.

The interviews stream returns interview definitions, which are the interview types configured in your Ashby account, such as a technical phone screen. It doesn't return scheduled interviews. Each record carries the definition's title, externalTitle, instructions, feedback settings, and feedbackFormDefinitionId. For interviews that were actually scheduled, along with their times and interviewers, use interview_schedules.

Starting in version 1.2.0, the connector sends includeNonSharedInterviews: true, so definitions that belong to a single job sync alongside shared ones. Use jobId to tell them apart: it holds the job the definition belongs to, and is null for shared definitions, which can be scheduled against any job. The connector leaves Ashby's includeArchived parameter at its default of false, so archived definitions aren't synced.

Version 1.2.0 also declared the fields interview.list returns, which the schema previously omitted. Refresh the source schema and enable the new columns in your connection to replicate them. The stream keeps declaring twelve fields that describe a scheduled interview rather than a definition: applicationId, interviewScheduleId, interviewStageId, status, createdAt, updatedAt, cancelledAt, startTime, endTime, interviewerUserIds, meetingLink, and feedbackLink. Ashby's interview.list endpoint doesn't return them, so those columns are always null. They stay in the schema so that removing them can be released as a breaking change later.

Performance considerations

Ashby doesn't publish a rate limit for the .list endpoints this connector reads, and the connector reads one stream at a time, so syncs are unlikely to be throttled. Ashby's rate limits apply per organization, so an API key shared with other integrations has less headroom. To protect that shared headroom, the connector limits itself to 100 requests per minute against application.listHistory, the one endpoint it calls at least once per application. The connector applies no request budget to any other endpoint, though Ashby's per-organization limits still apply everywhere.

IP allow list

If you use Airbyte Cloud and your organization restricts access to specific IPs, add the Airbyte Cloud IP addresses to your allow list.

Upgrading to 1.0.0

Version 1.0.0 declares element schemas for array columns that the connector previously left untyped. On data-lake destinations such as S3 Data Lake and Iceberg, those columns change type, so syncs can fail with a schema evolution error. Refresh the affected streams first, and drop and recreate the affected destination tables only if a sync still fails. For the full list of affected columns and the upgrade steps, see the Ashby migration guide.

Reference

Config fields reference

Field
Type
Property name
string
api_key
string
start_date

Changelog

Expand to review
VersionDatePull RequestSubject
1.2.02026-08-2985183Declare the interview definition fields interview.list actually returns on the interviews stream, and request non-shared (job-specific) interviews
1.1.02026-08-2584392Add application history stream
1.0.12026-08-2584405Send the pagination page size using Ashby's documented limit field instead of the undocumented per_page field
1.0.02026-08-1884274Breaking: declare documented API fields across stream schemas, including element schemas for previously untyped array columns. Data-lake users must refresh the affected streams, then recreate the affected tables if a sync still fails. See the migration guide.
0.3.92026-08-1878554Update dependencies
0.3.82026-08-1184215Promoted release candidate to GA
0.3.8-rc.52026-08-1184214Revert the concurrency work from 0.3.8-rc.1 through 0.3.8-rc.3: remove the API budget, concurrency level, and num_workers option.
0.3.8-rc.42026-08-1183816Add missing application, candidate, and source fields to the declared schemas, and remove duplicated unreferenced manifest blocks.
0.3.8-rc.32026-05-2678434Decrease default concurrency to 2 and add explicit worker count plus API request budget for the next rollout.
0.3.8-rc.22026-05-2178307Decrease default concurrency to 3 after Phase 1 rollout monitoring found source-read regressions and a 429 retry warning.
0.3.8-rc.12026-05-1877048Add concurrency support with default_concurrency=4 for concurrent stream reads
0.3.72026-04-2877144Update dependencies
0.3.62026-04-2176510Update dependencies
0.3.52026-03-3175881Update dependencies
0.3.42026-03-2475325Update dependencies
0.3.32026-03-1074490Update dependencies
0.3.22026-02-2473805Update dependencies
0.3.12026-02-1760692Update dependencies
0.3.02026-02-1373244Add interviews, interview_stages, and application_criteria_evaluations streams
0.2.232025-05-1059853Update dependencies
0.2.222025-05-0359322Update dependencies
0.2.212025-04-2658746Update dependencies
0.2.202025-04-1958271Update dependencies
0.2.192025-04-1257150Update dependencies
0.2.182025-03-2956594Update dependencies
0.2.172025-03-2256140Update dependencies
0.2.162025-03-0855387Update dependencies
0.2.152025-03-0154888Update dependencies
0.2.142025-02-2254234Update dependencies
0.2.132025-02-1553874Update dependencies
0.2.122025-02-0853407Update dependencies
0.2.112025-02-0152893Update dependencies
0.2.102025-01-2552162Update dependencies
0.2.92025-01-1851710Update dependencies
0.2.82025-01-1151292Update dependencies
0.2.72024-12-2850493Update dependencies
0.2.62024-12-2150207Update dependencies
0.2.52024-12-1449572Update dependencies
0.2.42024-12-1249014Update dependencies
0.2.32024-11-0448196Update dependencies
0.2.22024-10-2947729Update dependencies
0.2.12024-10-2847616Update dependencies
0.2.02024-08-1944420Refactor connector to manifest-only format
0.1.162024-08-1744288Update dependencies
0.1.152024-08-1243780Update dependencies
0.1.142024-08-1043491Update dependencies
0.1.132024-08-0343080Update dependencies
0.1.122024-07-2742658Update dependencies
0.1.112024-07-2042220Update dependencies
0.1.102024-07-1742028Fix typo in application stream
0.1.92024-07-1341818Update dependencies
0.1.82024-07-1041379Update dependencies
0.1.72024-07-0941271Update dependencies
0.1.62024-07-0640971Update dependencies
0.1.52024-06-2540469Update dependencies
0.1.42024-06-2240107Update dependencies
0.1.32024-06-0639159[autopull] Upgrade base image to v1.2.2
0.1.22024-05-2838666Make connector compatible with Builder
0.1.12024-05-2038421[autopull] base image + poetry + up_to_date
0.1.02022-10-2218334Add Ashby Source Connector