Grayscale's conversational recruiting platform helps employers engage candidates through texting, bulk messaging, automated communication, and AI-powered recruiting workflows that keep candidates informed and excited throughout the hiring process. Grayscale makes it easy to text candidates directly from within Greenhouse Recruiting while automating repetitive hiring tasks to help recruiters move faster and stay focused on high-value work.
Grayscale's integration with Greenhouse Recruiting combines powerful candidate messaging with advanced AI capabilities. Together, these tools help recruiting teams streamline hiring, reduce manual effort, and deliver a faster, more personalized candidate experience.
Note: Texting, powered by Grayscale is a built-in integration that allows you to text candidates from Greenhouse Recruiting. If you purchased a product directly from Grayscale, use this article to set up your integration.
Configure the Paylocity + Grayscale integration
While logged in with a Paylocity + Grayscale admin account, click Settings
Click Integrations
Select Greenhouse and click Edit
Click Edit Credentials
Select Recruiting, then select Next
Click Connect to Greenhouse
Scroll down, enter your Greenhouse email, and click Login to Greenhouse
Confirm the requested permissions and choose an authorization method. We recommend authorizing using a service account. For more on authorization methods, see Connect to Harvest v3 partner integrations.
Review the success confirmation
Webhooks are automatically registered as part of this process but will remain paused until all historical fetchers are complete. Webhooks will automatically enable at that point.
READS (Greenhouse → Grayscale)
| Object | Greenhouse field | Grayscale mapping |
| Candidate | id | Internal candidate reference ID |
| Candidate | first_name, last_name | Candidate name |
| Candidate | email_addresses[].value | Candidate email(s) |
| Candidate | phone_numbers[].value, .type | Candidate phone(s) |
| Candidate | website_addresses[].value, .type | Candidate URL(s) |
| Candidate | company, title | Candidate company / title |
| Candidate | tags | Candidate tags |
| Candidate | custom_fields (consent field) | SMS consent state |
| Candidate | last_activity_at, updated_at, created_at | Candidate timestamps |
| Job Application | id | Internal application reference ID |
| Job Application | candidate_id | Candidate reference |
| Job Application | job_id | Job requisition reference |
| Job Application | stage_id, stage_name | Job stage |
| Job Application | status (in_process/converted/rejected/hired) | Application status |
| Job Application | created_at, rejected_at, updated_at | Application timestamps |
| Job Application | reject_reason.name | Reject reason |
| Job Application | answers[].question, .answer | Question/answer pairs |
| Job Requisition | id, requisition_id | Internal job reference ID / code |
| Job Requisition | name | Job name |
| Job Requisition | status (open/closed) | Job status |
| Job Requisition | departments[].id, .name | Department(s) |
| Job Requisition | offices[].id, .name, .location | Office(s) |
| Job Requisition | hiring_team[].user_id, .type, .responsible | Hiring team roles |
| Job Requisition | custom_fields['brand'] | Brand metadata |
| Job Requisition | created_at, updated_at | Job timestamps |
| Job Post | id, job_id | Internal job post reference ID |
| Job Post | title, content, internal_content | Job post content |
| Job Post | internal, live, active | Post visibility/status |
| Job Post | questions[].label, .answer_type, .required, .private, .options | Application questions |
| Job Stage | id, job_id | Internal job stage reference ID |
| Job Stage | name, sort_order | Stage name / order |
| Job Interview | id, application_id, job_id | Internal interview reference ID |
| Job Interview | location, status | Interview location / status |
| Job Interview | starts_at/all_day_start_on, ends_at/all_day_end_on | Interview start/end time |
| Job Interview | organizer/interviewer id, first_name, last_name, primary_email | Interview participants |
| Remote User | id | Internal user reference ID |
| Remote User | first_name, last_name, primary_email | User identity |
| Remote User | deactivated | Disabled flag |
| Remote User | created_at, updated_at | User timestamps |
| Offer | id, application_id | Internal offer reference ID |
| Offer | status (Created/Accepted/Rejected/Deprecated) | Offer status |
| Offer | created_at, resolved_at | Offer timestamps |
| Prospect Pool Membership | candidate id, tags | Candidate prospect pool tags |
WRITES (Grayscale → Greenhouse)
| Action | Grayscale input | Greenhouse field |
| Create Candidate (POST /candidates) | first_name, last_name | first_name, last_name |
| Create Candidate (POST /candidates) | email_addresses[].value (type: personal) | |
| Create Candidate (POST /candidates) | phone_number | phone_numbers[].value (type: mobile) |
| Create Candidate (POST /candidates) | tag_labels | tags |
| Create Candidate (POST /candidates) | consent state | custom_fields[] (by custom_field_id or name_key) |
| Create Candidate (POST /candidates) | job_req_ids | application.job_ids |
| Create Candidate (POST /candidates) | source_id | application.source_id |
| Create Candidate (POST /candidates) | prospect flag | application.prospect (always true) |
| Add Employment History (POST /candidate_employments) | candidate_id, company, title, start_date, end_date | candidate_id, company_name, title, start_date, end_date (dates as YYYY-MM-DD) |
| Add Attachment (POST /attachments) | resume file name + content | application_id, filename, type (resume), content |
| Publish Note / Transcript (POST /notes) | conversation transcript body | candidate_id, body, note_type (NOTE), visibility (public), user_id |
Use the Paylocity + Grayscale integration
The Grayscale integration allows you to text candidates directly within Greenhouse Recruiting via the Chrome extension. The extension works on sourcing sites like LinkedIn as well.
Text candidates
With the extension open, click the g icon on the right of your screen. This allows you to start texting with the candidate.
If the candidate is not recognized within Grayscale, you can seamlessly add them to Grayscale. Grayscale automatically pulls in name, cell phone number, and email address, so all you need to do is click Save.
To access your full inbox, click on the Menu icon and select Inbox.
When texting, your conversation history will automatically be imported into the candidate's Activity Feed in Greenhouse Recruiting.
Note: To ensure the full communication is organized together in one Activity Feed note, Grayscale imports the entire conversation one hour after the last message is sent or received.
Bulk messaging
To send text messages in bulk, search open jobs in Greenhouse Recruiting directly from the Grayscale Chrome extension. Grayscale will provide you with a list of relevant candidates to message.
For example, if you want to message all candidates at the phone interview stage of an open job, simply search for the job in the Grayscale extension, and select the stage.
Opt-in consent for application-to-person (A2P) messaging
Application-to-person (A2P) messaging allows organizations to send messages to standard 10-digit long code (10DLC) phone numbers.
New texting regulations for A2P 10DLC require candidates expressly opt in when applying for jobs to receive A2P communications. If a candidate opts out, these messages will be blocked.
To obtain this opt-in consent in Greenhouse Recruiting, create a custom application question using Yes / No as the configured answer type, and then apply this question to your job posts in bulk.
Once created, you can report on candidate application responses to locate the consent status.
To learn more about working with A2P 10DLC regulations in Greenhouse Recruiting, reach out to your Customer Success manager or open a ticket with Greenhouse Technical Support.
Frequently asked questions
Where do I download the Chrome extension?
I downloaded the Chrome extension, and the Grayscale tab is not showing up.
First, verify that you're using the Chrome browser, then try refreshing the page. If this doesn't resolve the issue, make sure you're on a supported website such as Greenhouse Recruiting or LinkedIn. If you're not on Greenhouse Recruiting, navigate to Greenhouse Recruiting, refresh the page, and try again. If the issue persists, clear your cache / cookies and restart Chrome.
My texting history is not displaying on the candidate Activity Feed.
Grayscale updates the candidate's Activity Feed one hour after the latest text message was sent or received for that candidate. This ensures your entire conversation is organized within the same note in the Activity Feed. If it's been longer than an hour, try refreshing the candidate's profile in Greenhouse Recruiting.
Where can I get more resources?
For additional support using the Grayscale integration, check out their FAQ.
Additional resources
For additional information not covered here, reach out to Support@grayscaleapp.com.