Skip to content
HubSpot Solution Blueprint

Automating Bi-Directional Attachment Sync Between Bullhorn ATS and HubSpot Custom Objects

Hero featured image

Standard HubSpot-to-Bullhorn integrations fail on binary file transfers. For an executive search firm, we engineered a serverless Pipedream middleware layer that intercepts HubSpot form submissions and streams resume files directly into Bullhorn Candidate entities. The firm's 14,000+ profiles stayed functionally complete with no manual uploads.

Executive Summary

context-header-icon

Context

An executive recruitment firm had to replace a legacy Volcanic site with HubSpot while keeping Bullhorn as their system of record. The non-negotiable requirement was a zero-touch sync for candidate resumes from HubSpot CMS forms into the Bullhorn candidate file repository.

what-we-built-header-icon

What We Built

A serverless Pipedream middleware integration handles binary file transfers and relational data mapping between Bullhorn, Idibu, and HubSpot.

tech-stack-header-icon

Tech Stack

  • Bullhorn (ATS), HubSpot Marketing & CMS Hub Enterprise, Pipedream (Node.js Environment), HubSpot Files API, Bullhorn REST API

Not a fit for firms that only need contact record syncing and don't store original resume files or legal documents inside the ATS environment.

the-challenge-header-icon

The Challenge

The technical bottleneck sat in Bullhorn: it can't ingest the public URLs that HubSpot's file upload fields generate. Bullhorn requires files to attach as specific entities (CandidateFile), so a direct mapping was impossible. Mid-deployment, the firm switched from Broadbean to Idibu, which shifted the payload structure for incoming job alerts. The middleware architecture therefore had to handle asynchronous file processing, or large PDF or DOCX files would hit timeout errors during transfer.

our-approach-header-icon

Our Approach

Pipedream acts as an intermediary file processor. When a candidate submits a resume on the HubSpot CMS, the middleware triggers a GET request to the HubSpot Files API and retrieves the binary content. The script then sends an authenticated POST request to the Bullhorn `/file` endpoint, tying the binary data to the newly created Candidate ID. For the switch from Broadbean to Idibu, we abstracted the data transformation logic into separate Node.js modules. The job board provider can change without anyone rewriting the file-handling routine.

impact-header-icon

Impact

check-icon

~90% Faster Candidate Time-to-Entry

The recruitment team no longer downloads CVs from HubSpot and re-uploads them to Bullhorn by hand. Automated file transfer logic cut time-to-entry for new candidates by an estimated 90%.

check-icon

Data Consistency Across Systems

The file physically moves rather than just syncing as a URL. Recruiters working exclusively in Bullhorn get immediate access to candidate resumes, even if the HubSpot public link expires or the file moves in the CMS.

check-icon

Middleware-Level API Throttling

The Pipedream queue managed the API load for binary transfers, which cost far more resources than standard JSON updates. The integration never hit Bullhorn's concurrency limits, even during peak application windows.

check-icon

100% File Transfer Integrity via Retry Logic

A resume lost during a sync is a high-cost failure in the specialized executive search vertical. A retry-logic loop implemented within the middleware automatically re-attempts any failed file transfer. Candidate profiles maintain 100% data integrity for that reason.

Technical Blueprint
1

A serverless function downloads the file from HubSpot's CDN into temporary Pipedream storage first. From that staging point, the system calculates the necessary metadata (file size, MIME type) that the Bullhorn API requires before the final upload occurs.

2

"Job" and "Candidate" live as distinct Custom Objects in HubSpot. When a candidate applies, the middleware updates the HubSpot record and creates the Bullhorn entity at the same time, so the attachment links to the correct internal ID in both environments.

3

Duplicate file uploads get detected by dedicated logic. When a candidate re-applies with a new resume, the system creates a new "CandidateFile" record in Bullhorn with a timestamp instead of overwriting the previous version. The candidate's professional history stays intact.

4

The middleware manages the OAuth 2.0 refresh tokens for both Bullhorn and HubSpot to keep the connection secure. Token expiration can't interrupt a long-running binary transfer, and that expiration is a common failure point in long-form data syncs.

Pipedream middleware architecture bridging Bullhorn ATS and HubSpot Custom Objects.

Standard CRM integrations routinely fail on binary file transfers like candidate resumes. Engineering a serverless Pipedream middleware layer intercepts HubSpot form submissions and streams resume files directly into Bullhorn Candidate entities. This automation ensures recruitment profiles remain functionally complete without manual uploads.

Scope it with us

FAQ

Why not just use the HubSpot public file URL inside a custom field in Bullhorn?

Bullhorn's internal search and parsing tools can't "read" or index a file stored on an external URL. Pushing the binary file into Bullhorn turns on the ATS's native resume parsing and keyword search capabilities. Both are critical for executive search workflows.

How does the system handle very large attachments that might timeout?

Pipedream's asynchronous execution runs the file transfer independently of the HubSpot form submission. For a particularly large file, the middleware queues the task. The user sees a successful submission on the website while the background transfer continues to Bullhorn.

footerCTA footerCTA-mobile
Spice up your inbox
Sign up for our newsletter
Don't worry - we only average, like, two emojis per subject line.