HRMS migration

Migrate from SignalHire to Bullhorn ATS & CRM

Field-level mapping, validation, and rollback between SignalHire and Bullhorn ATS & CRM. We move data and schema; workflows are rebuilt natively in Bullhorn ATS & CRM.

SignalHire logo

SignalHire

Source

Bullhorn ATS & CRM

Destination

Bullhorn ATS & CRM logo

Compatibility

58%

7 of 12

objects map 1:1 between SignalHire and Bullhorn ATS & CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

SignalHire and Bullhorn serve fundamentally different functions in a recruiting stack. SignalHire is a B2B contact database and enrichment platform optimized for outbound prospecting at scale, while Bullhorn is a full ATS and recruitment CRM designed to manage the candidate lifecycle from lead through placement. Migrating from SignalHire to Bullhorn means extracting professional profile records and contact details from SignalHire's database and loading them as Bullhorn Candidates and ClientCorporations with enriched contact data preserved in custom fields. The migration does not recreate SignalHire's live-prospect enrichment workflow inside Bullhorn; it delivers a one-time import of the customer's existing SignalHire-sourced contact records into Bullhorn's persistent candidate database. We flag the absence of a native SignalHire export feature upfront and work from CSV enrichment exports and API lookups to reconstruct the record set. Workflows, automations, credit balances, and integration configurations do not migrate because SignalHire's credit-consumption model and Bullhorn's workflow engine are structurally incompatible.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

SignalHire logo

SignalHire

What's pushing teams away

  • The 'Unlimited' plan hides a 5,000-credit-per-month fair-usage cap in tooltip text, not on the pricing page, leading to budget surprises when teams exceed the limit.
  • Data freshness is inconsistent — multiple G2 reviews cite outdated email addresses and phone numbers that no longer reach the intended contacts.
  • Credit costs add up quickly on the lower tiers — the Phones plan delivers only 435 credits per month at $69, making phone-only outreach expensive relative to alternatives.
  • Platform coverage is skewed toward US and Western markets; users conducting global recruitment report significantly lower match rates outside these regions.
  • No native ATS capabilities mean SignalHire is purely a data source; teams needing full recruiting workflows still require a separate ATS.

Choosing

Bullhorn ATS & CRM logo

Bullhorn ATS & CRM

What's pulling them in

  • Agencies choose Bullhorn because it combines ATS and CRM in one platform, eliminating the need to switch between separate tools for candidate management and client relationship tracking.
  • The resume parser extracts contact details, work history, and skills into structured, searchable candidate profiles automatically without manual data entry, reportedly driving 24% more placements per recruiter.
  • Bullhorn's placement and split-billing model natively supports contract staffing workflows, handling start/end dates, overtime rules, and multi-party pay/charge rates in a single record.
  • The platform offers extensive third-party integrations through its Recruitment Cloud Marketplace, connecting with back-office, onboarding, and payroll systems used by staffing agencies.
  • 72% of Bullhorn customers are teams with fewer than 10 users, and Bullhorn's implementation team handles setup and data migration for small agencies going live within weeks.

Object mapping

How SignalHire objects map to Bullhorn ATS & CRM

Each row shows how a SignalHire object lands in Bullhorn ATS & CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

SignalHire

People Profile

maps to

Bullhorn ATS & CRM

Candidate

1:1
Fully supported

SignalHire People Profiles map directly to Bullhorn Candidate records. The person's name maps to firstName and lastName; current job title maps to Candidate.occupation; current employer maps to Candidate.companyName; location maps to Candidate.address. SignalHire's verification status (Valid / Risky / Unknown) is preserved in a custom field sh_email_verification__c. The SignalHire UID is stored in a custom field sh_profile_id__c as an audit reference. If the SignalHire profile contains work history beyond the current position, employment records migrate as Bullhorn CandidateEmployment records via the employmentHistory sub-entity or as a structured note if the destination Bullhorn instance does not have the employment sub-entity enabled.

SignalHire

Company Profile

maps to

Bullhorn ATS & CRM

ClientCorporation

1:1
Fully supported

SignalHire Company Profiles map to Bullhorn ClientCorporation records. Company name maps to ClientCorporation.name; domain maps to ClientCorporation.website; industry maps to ClientCorporation.industry; size range maps to ClientCorporation.numberOfEmployees or a custom size-tier field. SignalHire's company records are scraped derivatives from professional profile pages rather than authoritative company data, so we flag this provenance in a custom field sh_company_provenance__c. If the staffing agency already uses Bullhorn's ClientCorporation structure for real clients, SignalHire company profiles are imported as separate records with a type flag to distinguish sourced prospects from active client accounts.

SignalHire

Email Address (verified)

maps to

Bullhorn ATS & CRM

Candidate.email

1:1
Fully supported

The primary verified email address from SignalHire maps to Candidate.email. Additional emails on the profile map to Candidate.email2 and Candidate.email3. The SignalHire deliverability status (Valid / Risky / Unknown) is preserved per address in custom fields sh_email1_status__c, sh_email2_status__c, and sh_email3_status__c. Risky-flagged emails are flagged in Bullhorn but not excluded from import; the customer's admin decides whether to suppress outreach to those addresses.

SignalHire

Phone Number

maps to

Bullhorn ATS & CRM

Candidate.phone

1:1
Fully supported

SignalHire phone numbers with country code and line type (mobile/landline) map to Candidate.phone, Candidate.phone2, and Candidate.phone3. The SignalHire verification confidence score is preserved in custom fields sh_phone1_confidence__c and sh_phone2_confidence__c. Mobile numbers are flagged with a sh_phone1_type__c custom field set to Mobile or Landline. If SignalHire returns no phone for a profile, no phone field is populated in Bullhorn.

SignalHire

Social Profile (LinkedIn)

maps to

Bullhorn ATS & CRM

Candidate.customText34 (LinkedIn URL field)

1:1
Fully supported

SignalHire's LinkedIn URL maps to Bullhorn's standard Candidate.customText34 field, which is the designated LinkedIn URL field in Bullhorn's Candidate Search! configuration. Any additional social profiles (Twitter, GitHub, etc.) are stored in a custom text area sh_social_links__c as a semicolon-delimited URL list. The LinkedIn UID from SignalHire is preserved in sh_linkedin_uid__c for reference.

SignalHire

Lead List / Talent Pool

maps to

Bullhorn ATS & CRM

Custom Object (list membership) or Candidate custom field

lossy
Fully supported

SignalHire talent pools and lead lists represent a many-to-many membership relationship between profiles and named lists. Bullhorn has no native equivalent for named prospect lists as a standalone object type. We resolve this by either creating a Bullhorn CustomObject (CustomObject1) to store list membership as records with a lookup to Candidate plus a listName field, or by using a Candidate custom picklist field (sh_talent_pool__c) with multi-select values for list membership. The choice depends on the number of lists and the expected query patterns. During import, we reconstruct each list by resolving the SignalHire profile UIDs to Bullhorn Candidate IDs and writing the membership records. If CustomObject is chosen, Bullhorn Support ticket is required to provision the custom object before migration begins.

SignalHire

Email Verification Status

maps to

Bullhorn ATS & CRM

Candidate custom fields

lossy
Fully supported

SignalHire's per-email deliverability scoring (Valid, Risky, Unknown) has no native Bullhorn equivalent. We create custom fields sh_email1_status__c, sh_email2_status__c, and sh_email3_status__c on the Candidate entity as picklist fields with those three values. This allows Bullhorn admins to filter candidates by email quality for outreach prioritization or suppression. The custom fields are deployed via Bullhorn metadata API or Admin Field Mappings before the Candidate import begins.

SignalHire

Phone Confidence Score

maps to

Bullhorn ATS & CRM

Candidate custom fields

lossy
Fully supported

SignalHire's phone verification confidence (high/medium/low or numeric score) is preserved in custom fields sh_phone1_confidence__c and sh_phone2_confidence__c on the Candidate entity. Bullhorn does not have a native confidence scoring model for phone numbers, so this is a custom field configuration. The confidence value is stored as text to accommodate both numeric scores and label-based confidence tiers depending on what SignalHire returned for each record.

SignalHire

Company Size Range

maps to

Bullhorn ATS & CRM

ClientCorporation custom field

lossy
Fully supported

SignalHire company profiles include a size range (e.g., 51-200 employees) rather than a precise headcount. Bullhorn's ClientCorporation.numberOfEmployees field is an integer field. We map SignalHire's size range to a custom picklist field sh_company_size_range__c on ClientCorporation to preserve the original granularity, and we optionally populate numberOfEmployees with the midpoint of the range as an approximate integer for reporting purposes. The custom field is created before the company import phase.

SignalHire

Employment History (extended)

maps to

Bullhorn ATS & CRM

CandidateEmployment sub-entity

1:many
Fully supported

If the SignalHire profile includes multiple employment periods (past job titles and employers), these map to Bullhorn's CandidateEmployment sub-entity on the Candidate record. Each employment period maps: title to CandidateEmployment.title, companyName to CandidateEmployment.companyName, startDate and endDate to CandidateEmployment.dateAdded and endDate, and location to CandidateEmployment.location. Employment history is loaded after the parent Candidate record is created to satisfy the entity dependency.

SignalHire

SignalHire UID

maps to

Bullhorn ATS & CRM

Candidate custom field

1:1
Fully supported

The SignalHire-generated profile UID is stored in a custom field sh_profile_id__c on the Candidate record. This field is non-editable by recruiters and serves as an audit reference linking Bullhorn records back to the original SignalHire source data. It is critical for reconciliation if the customer needs to cross-reference migrated records against a future SignalHire export or if a data dispute arises post-migration.

SignalHire

Team Member (SignalHire account users)

maps to

Bullhorn ATS & CRM

Bullhorn User

1:1
Fully supported

SignalHire team member records (name, email, role) are extracted for documentation purposes only. Bullhorn User records must be provisioned through Bullhorn's own user management, not imported. We provide a team roster reconciliation document listing every SignalHire team member with their email and role so the Bullhorn admin can provision matching Users before migration begins. User-level permission structures are not exposed via SignalHire API and must be manually reconfigured in Bullhorn by the admin.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

SignalHire logo

SignalHire gotchas

High

Unlimited plan credit cap is hidden in tooltip text

Medium

Credit consumed per lookup, not per successful result

Medium

API async mode requires a publicly accessible callback URL

Low

Company profiles are scraped derivatives, not authoritative records

Bullhorn ATS & CRM logo

Bullhorn ATS & CRM gotchas

High

ATS Growth edition has no API access

High

Attachments excluded from CSV bulk exports

Medium

Custom Object limits vary sharply by edition

Medium

Opportunity pipeline stages are recruitment-specific

Low

Resume parse quality varies by document format

Pair-specific challenges

  • SignalHire has no documented bulk export feature

    SignalHire is designed for ongoing prospecting rather than data portability. There is no documented one-click export of all profile records, enrichment CSVs, or list membership data. We work from a combination of CSV enrichment exports and SignalHire API synchronous lookups to reconstruct the record set. Customers who have not downloaded enrichment CSV exports before initiating migration may need to run bulk enrichment jobs first, which consumes credits. We scope the credit cost for this reconstruction phase and advise customers on the expected credit consumption before any lookups are performed.

  • Bullhorn custom objects require a support ticket to provision

    If the migration uses Bullhorn CustomObject1 to store SignalHire talent pool membership (the many-to-many list-to-profile relationship), Bullhorn Support must provision the custom object before we can write any data to it. Bullhorn's documentation confirms that custom objects must initially be set up by Bullhorn Support via a support ticket. We open this ticket during the discovery phase and hold the custom object data migration phase until provisioning is confirmed. This adds typically one to two weeks to the timeline if Bullhorn Support queue is busy.

  • SignalHire verification flags have no native Bullhorn home

    SignalHire's per-email deliverability status (Valid / Risky / Unknown) and per-phone confidence score are enrichment-specific metadata with no equivalent in Bullhorn's standard Candidate schema. We map these to custom fields (sh_email_status__c, sh_phone_confidence__c) that must be created before the Candidate import phase. If the Bullhorn instance has strict field-level security or profile-based field visibility restrictions, the migration user must be granted read and write access to these custom fields before records can be loaded. We coordinate with the Bullhorn admin to configure this during schema design.

  • SignalHire company data is scraped, not authoritative

    SignalHire's company profiles are aggregated from scraped professional profile pages rather than sourced from official company databases. Job titles, company names, and size ranges reflect what was scraped at the time of lookup. Bullhorn ClientCorporation records represent the staffing agency's own client accounts or sourced companies. We flag this provenance in a custom field sh_company_provenance__c set to Scraped so that Bullhorn admins understand the data quality level and do not treat SignalHire-sourced company records as authoritative client data without manual verification.

  • Credit balances and integration configs have no migration path

    SignalHire credits are a billing mechanism with no Bullhorn equivalent; unused credits are forfeited at cancellation. CRM/ATS integration settings (field mappings, sync directions, webhook URLs) in SignalHire are destination-specific and do not transfer to Bullhorn, which has its own integration framework via Bullhorn Marketplace (350+ integrations) and REST API. We document the existing SignalHire integration configuration as-is for the customer's reference so their admin can rebuild equivalent integrations in Bullhorn after migration.

Migration approach

Six steps for a successful SignalHire to Bullhorn ATS & CRM data migration

  1. Discovery and SignalHire data reconstruction

    We audit the SignalHire account for profile volume, company profile volume, email and phone counts, talent pool names and membership sizes, and team roster. Because SignalHire lacks a bulk export feature, we determine the reconstruction method: if the customer has prior enrichment CSV exports, we use those; if not, we run SignalHire API lookups by profile UID or by name-and-company combinations to reconstruct the dataset. We calculate the expected credit consumption for API reconstruction and advise the customer before any lookups are performed. We also document the existing talent pool structure and list names to inform the Bullhorn custom object or tagging strategy.

  2. Bullhorn schema design and custom field creation

    We design the Bullhorn destination schema before any data moves. This includes creating custom fields on Candidate (sh_profile_id__c, sh_email_status__c, sh_phone_confidence__c, sh_linkedin_url__c, sh_talent_pool__c) and on ClientCorporation (sh_company_size_range__c, sh_company_provenance__c). If the talent pool membership requires a CustomObject, we open a Bullhorn Support ticket to provision CustomObject1 and define its schema (listName as a string field, candidateId as a reference to Candidate). We also configure Bullhorn Field Mappings to expose these custom fields in the appropriate Page Layouts. Schema is deployed into a Bullhorn sandbox or staging environment first for validation.

  3. Sandbox migration and reconciliation

    We run a full migration into the Bullhorn sandbox using a representative data volume sample (typically 10-20% of total records). The customer's recruiting operations lead reconciles record counts in Bullhorn against the SignalHire source data, spot-checks 25-50 randomly selected Candidates for field-level accuracy (name, email, phone, LinkedIn URL, verification status), and validates that talent pool membership is correctly reconstructed. Any mapping corrections, custom field type adjustments, or list reconstruction issues are identified here and fixed before production migration begins.

  4. SignalHire profile enrichment run (if needed)

    If the customer does not have sufficient CSV export history and the API reconstruction will consume significant credits, we coordinate a structured enrichment run against the SignalHire profile UIDs before production migration. This is sequenced after sandbox sign-off so that the final dataset is known. We apply a conservative rate-limit strategy against the SignalHire API to avoid credit overruns and generate a run log for cost tracking. The enrichment output is a normalized CSV that feeds the production Bullhorn import.

  5. Production migration in dependency order

    We run production migration into Bullhorn in record-dependency order: ClientCorporation records first (from SignalHire Company Profiles), then Candidate records (from SignalHire People Profiles) with ClientCorporationId resolved for company affiliation, then phone and email fields with verification custom fields populated, then LinkedIn and social links, then CandidateEmployment sub-records for any extended work history, then CustomObject1 records for talent pool membership reconstruction. Each phase emits a row-count reconciliation report before the next phase begins. SignalHire writes are not frozen during migration because SignalHire is read-only for the migration use case; any new records added during migration are caught in a delta pass after sandbox sign-off.

  6. Cutover, validation, and rebuild handoff

    We perform a final delta pass to capture any SignalHire records created or modified after the main extraction. We deliver a migration summary report with record counts per object, a list of any records that failed validation and were held in a retry queue, and a talent pool reconstruction summary. We provide a written SignalHire integration inventory documenting any active SignalHire-to-Bullhorn integrations, API keys, and webhook configurations that the customer's admin must rebuild inside Bullhorn's integration framework. We support a one-week post-migration window for reconciliation issues. We do not rebuild SignalHire's enrichment workflow inside Bullhorn; that is a separate consulting engagement focused on Bullhorn Automation and Bullhorn AI configuration.

Platform deep dives

Context on both ends of the pair

SignalHire logo

SignalHire

Source

Strengths

  • Large-scale B2B contact database with 850M+ profiles aggregated from public professional networks.
  • Browser extension for one-click contact extraction directly from LinkedIn profile pages.
  • Dual-mode API with synchronous lookup and asynchronous batch processing via callback URL.
  • Verified deliverability status on every email address with confidence scoring.
  • Shared credit pool across unlimited users on paid plans simplifies team licensing.

Weaknesses

  • Credit-based pricing creates unpredictable costs as record volumes grow; 'unlimited' branding obscures hard caps.
  • Data accuracy and freshness are recurring complaints in user reviews, particularly for international records.
  • No ATS, onboarding, or candidate management features — purely a data-enrichment tool.
  • Integration ecosystem is limited to major CRMs and ATS platforms with no self-service field mapping.
  • Historical data export is not a documented feature; SignalHire is designed for ongoing prospecting rather than data portability.
Bullhorn ATS & CRM logo

Bullhorn ATS & CRM

Destination

Strengths

  • Unified ATS and CRM on one platform purpose-built for staffing agencies, eliminating separate tools for candidates and clients.
  • Automated resume parsing extracts structured candidate data—contact details, work history, skills—into searchable profiles instantly.
  • Native placement and split-billing model handles contract staffing workflows including start/end dates and overtime rules.
  • Bullhorn Recruitment Cloud Marketplace offers 100+ pre-validated third-party integrations spanning the full recruiting lifecycle.
  • 24/7 global support coverage from 350+ support staff with dedicated account management included at all tiers.

Weaknesses

  • Widely regarded as old and bloated with an unintuitive interface and steep learning curve for new recruiters.
  • Slow page loads and performance lag cited in over 200 verified G2 reviews during high-volume recruiting periods.
  • Pricing is opaque—custom-negotiated per organization with significant upfront implementation fees that vary by deal.
  • ATS Growth edition excludes API access entirely, preventing automated data export without upgrading first.

Complexity grading

How hard is this migration?

Standard HRMS migration. All 7 core objects map 1:1 between SignalHire and Bullhorn ATS & CRM.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across SignalHire and Bullhorn ATS & CRM.

  • Object compatibility

    A

    All 7 core objects map 1:1 between SignalHire and Bullhorn ATS & CRM.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    7-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    SignalHire: Not publicly documented; credits serve as the primary usage gate rather than explicit request-rate limits.

  • Data volume sensitivity

    A

    SignalHire exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your SignalHire to Bullhorn ATS & CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about SignalHire to Bullhorn ATS & CRM data migrations

Answers to the questions buyers ask most during SignalHire to Bullhorn ATS & CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your SignalHire to Bullhorn ATS & CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between three and five weeks for accounts with up to 10,000 profiles and straightforward Candidate mapping. Migrations with large profile volumes (over 50,000 records), custom object setup for talent pools, extended employment history per profile, or multi-tiered company-to-corporation relationships move to eight to fourteen weeks. The Bullhorn Support ticket cycle for custom object provisioning (typically one to two weeks) adds to the timeline if a CustomObject is required for talent pool reconstruction.

Adjacent paths

Related migrations to explore

Ready when you are

Move from SignalHire.
Land in Bullhorn ATS & CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day