Bullhorn CRM Reader
Note
This adapter is in preview and is available on Striim Developer only. See Striim Developer for more information.
Bullhorn CRM is a cloud-based solution for recruitment and staffing. It combines applicant tracking (ATS) and CRM. Bullhorn streamlines candidate management and client relations with features like resume parsing, application management, and email integration. It helps manage customer relationships and maximize business growth, with mobile accessibility.
The Bullhorn CRM Reader connects with the Bullhorn CRM platform and reads supported objects.
Feature summary
Feature | Supported? | Notes | |
---|---|---|---|
Objects | Standard objects | ✓ | |
Custom objects | ✓ | ||
Authentication | Basic authentication | Username and password | |
OAuth authentication | ✓ | Manual configuration based | |
Custom authentication methods | Not all methods may be supported | ||
Operations | Automated mode | ✓ | |
Initial load | ✓ | ||
Pull-based incremental load | ✓ | ||
Push-based incremental load | |||
Automated pipeline | |||
Governance | Connection profile | ||
Sherlock AI | |||
Sentinel AI | |||
Schema handling | Initial schema creation | ✓ | Works with supported targets |
Schema evolution | |||
Setup | Wizard template | ||
Flow Designer | ✓ | ||
Striim TQL | ✓ | ||
Runtime | Resilience/recovery | ✓ | |
Parallel execution | |||
Metrics | ✓ | Standard metrics |
Supported authentication method
The Bullhorn CRM Reader supports OAuth authentication. Creating a connection requires obtaining your Client ID and Client Secret from Bullhorn Support, obtaining an authorization code and exchanging it for an access token and a refresh token, and setting the connection properties in Striim.
To configure OAuth authentication with Bullhorn CRM:
Contact Bullhorn Support to get your Client ID and Client Secret.
Use the following URL format in your browser to get the authorization code:
https://auth.bullhornstaffing.com/oauth/authorize?client_id={client_id}&response_type=code &username={username}&password={password}&action=Login
After logging in, you will receive a URL with a
code
parameter.Run this
curl
command to exchange the code for an access token and refresh token:curl -X POST 'https://auth.bullhornstaffing.com/oauth/token' \ -H 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=authorization_code' \ --data-urlencode 'code={authorization_code}' \ --data-urlencode 'client_id= {client_id}' \ --data-urlencode 'client_secret={client_secret}'
This command will return an access token and a refresh token in the response.
When the access token expires, use the refresh token to get a new access token:
curl -X POST 'https://auth.bullhornstaffing.com/oauth/token' \ -H 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=refresh_token' \ -- data-urlencode 'refresh_token={refresh_token}' \ --data-urlencode 'client_id= {client_id}' \ --data-urlencode 'client_secret={client_secret}'
This will return a new access token and possibly a new refresh token.
Supported objects
The following are the supported objects for reading from Bullhorn CRM:
ActivityGoal
ActivityGoalConfiguration
ActivityGoalTarget
Appointment
AppointmentAttendee
AppointmentEditHistory
AppointmentEditHistoryFieldChange
BillableChargeEditHistory
BillableChargeEditHistoryFieldChange
Branch
BusinessSector
Candidate
CandidateCertification
CandidateCertificationEditHistory
CandidateCertificationEditHistoryFieldChange
CandidateCertificationRequirement
CandidateCertificationRequirementEditHistory
CandidateCertificationRequirementEditHistoryFieldChange
CandidateCustomSearchLayout
CandidateEducation
CandidateFasterFindLayout
CandidateFileAttachment
CandidateHistory
CandidateListExpandedLeftLayout
CandidateListRowLayout
CandidateMobileDetailsLayout
CandidateMobileEditLayout
CandidateOverviewBottomLayout
CandidateOverviewMiddleLeftLayout
CandidateOverviewMiddleRightLayout
CandidateOverviewTopLayout
CandidateProfileHeaderLayout
CandidateProfileRightSideBarLayout
CandidateReference
CandidateReferenceQuestion
CandidateReferenceResponse
CandidateSource
CandidateWorkHistory
Category
Certification
CertificationGroup
CertificationRequirement
ClientContact
ClientContact1
ClientContact2
ClientContact3
ClientContact4
ClientContact5
ClientContactFileAttachment
ClientContactHistory
ClientCorporation
ClientCorporation1
ClientCorporation2
ClientCorporation3
ClientCorporation4
ClientCorporation5
ClientCorporationAppointment
ClientCorporationCertification
ClientCorporationEditHistory
ClientCorporationEditHistoryFieldChange
ClientCorporationFileAttachment
ClientCorporationHistory
ClientCorporationNote
ClientCorporationTask
CorporateUser
CorporationDepartment
Country
Department
EntityFieldTypeLookup
EntityFiles
Find
GoalTarget
HousingComplex
HousingComplexAmenity
HousingComplexFurnitureDelivery
HousingComplexUnit
HousingComplexUtilityAccount
JobBoardPost
JobOrder
JobOrder1
JobOrder2
JobOrder3
JobOrder4
JobOrder5
JobOrderEditHistory
JobOrderEditHistoryFieldChange
JobOrderFasterFindLayout
JobOrderFileAttachment
JobOrderHistory
JobOrderListExpandedCenterLayout
JobOrderListExpandedLeftLayout
JobOrderListExpandedRightLayout
JobOrderListRowLayout
JobOrderMobileDetailsLayout
JobOrderMobileEditLayout
JobOrderOverviewBottomLayout
JobOrderOverviewMiddleLeftLayout
JobOrderOverviewMiddleRightLayout
JobOrderProfileHeaderLayout
JobOrderProfileRightSideBarLayout
JobOrderTemplate
JobSubmission
JobSubmissionCertificationRequirement
JobSubmissionCertificationRequirementEditHistory
JobSubmissionCertificationRequirementEditHistoryFieldChange
JobSubmissionEditHistory
JobSubmissionEditHistoryFieldChange
JobSubmissionHistory
Location
LocationEditHistory
LocationEditHistoryFieldChange
LocationEffectiveDateChange
LocationVersion
Note
NoteEntity
Opportunity
OpportunityEditHistory
OpportunityEditHistoryFieldChange
OpportunityFileAttachment
PayableChargeEditHistory
PayableChargeEditHistoryFieldChange
Person
Placement
Placement1
Placement2
Placement3
Placement4
Placement5
PlacementCertification
PlacementCertificationEditHistory
PlacementCertificationEditHistoryFieldChange
PlacementChangeRequest
PlacementChangeRequestEditHistory
PlacementChangeRequestEditHistoryFieldChange
PlacementCommission
PlacementCommissionEditHistory
PlacementCommissionEditHistoryFieldChange
PlacementEditHistory
PlacementEditHistoryFieldChange
PlacementFileAttachment
PlacementRateCard
PlacementRateCardLine
PlacementRateCardLineGroup
PrimaryEntityToAssociatedEntityAssociations
Report
SalesQuota
SalesTaxRateEditHistory
SalesTaxRateEditHistoryFieldChange
SalesTaxRateEffectiveDateChange
SavedSearch_AA_pipeline
SavedSearch_AK_06_26_19_NEW_DAI_search
SavedSearch_AK_BROAD_Controls
SavedSearch_Alex_Bruno_Candidates
SavedSearch_Anna_Allen_Prospect_and_Pipeline
SavedSearch_Anna_W_Pipeline
SavedSearch_Chandlers_Pipeline
SavedSearch_Kroger_Recruiter_Admin
SavedSearch_Mechanical_Designer
SavedSearch_QE_KY_search
SavedSearch_Scott_s_targets
SavedSearch_Sourced
SavedSearch_Taylor_Hunt_Prospects_Pipeline
SavedSearch_Test_favorites
SavedSearch_Wiring_Tech_Fairfield
SavedSearch_assembler_tearsheets
SavedSearch_mandy_pros_pipe
SavedSearches
Sendout
Shift
Skill
Specialty
State
Task
TaskEditHistory
TaskEditHistoryFieldChange
Tearsheet
TearsheetMember
TearsheetRecipient
TimeUnit
UserEditHistory
UserEditHistoryFieldChange
UserHousingComplexUnit
UserPulseCallLog
UserPulseCallLogContact
UserType
WorkersCompensation
WorkersCompensationRate
ZipCodeGis
Bullhorn CRM Reader properties
Property | Type | Default value | Notes |
---|---|---|---|
Data center code | String | The data center code where your account's data is hosted, for example, CLS40, CLS30 etc. You can identify your data center code by examining your browser's URL when logged into Bullhorn CRM. The cluster ID (e.g., CLS2, CLS21) appears in the URL's address bar. For example, a URL like https://cls21.bullhornstaffing.com/BullhornSTAFFING/MainFrame.jsp indicates that the user is on cluster CLS21. | |
Client ID | String | The client ID assigned when you register your application with an OAuth authorization server. | |
Client secret | Password | The client secret assigned when you register your application with an OAuth authorization server. | |
Refresh token | Password | ||
Connection pool size | Integer | 20 | Specifies the maximum number of active connections. |
Exclude tables | String | A list of tables excluded from read operations. Typically used to create a list of exceptions when the Tables property includes wildcards. Misconfiguration of the Tables and Exclude Tables properties can cause "Invalid table names" errors. | |
Incremental load marker | String | The incremental load marker is a unique incremental column in each object used for incremental load. When no marker is specified, tables are resynced at each polling interval. Specify the name of the column that contains the start position value. This column must meet the following criteria:
| |
Migrate schema | Boolean | False | Only available in Initial Load or Automated mode. Set to |
Mode | Select list:
| Automated | Automated mode applies incremental updates to objects that support incremental load and performs full resyncs for objects that do not support incremental load. |
Polling interval | Integer | 5m | Specifies an interval as an integer followed by a unit. Supported units are days ( |
Refresh token | Password | An OAuth 2.0 refresh token.Use the value generated while creating the token. | |
Start Position | String | %=-1 | Value of the incremental load marker that defines the initial reading position. |
Tables | String | A semicolon-delimited (;) list of objects to read from the source. Supports the | |
Thread pool count | Integer | 10 | The number of parallel running threads. The default value of zero specifies single-threaded operation. When the value of the thread pool counter is higher than the connection pool size, large data ingestion operations can cause the app to halt. Since best performance is achieved when using one thread for each table being synced, increasing the size of the connection pool to match the number of threads in use is a performance best practice. |