Pull your Recruiterflow data into Microsoft Power BI to build custom dashboards and reports — covering candidates, contacts, jobs, clients, deals, stage movements, placements, activities, and more.
What you'll need
A Recruiterflow account with admin access
Microsoft Power BI Desktop installed
Step 1: Get your Recruiterflow API key
Go to Settings → Integrations.
Find the Power BI section and copy your authentication (API) key.
Keep this key handy — you'll paste it into Power BI in the next step.
Step 2: Create a data query in Power BI
In Power BI Desktop, click Get Data in the toolbar and select Blank Query. This opens the query editor.
In the query editor, paste the function below. This example fetches candidate data — replace
INSERT KEYwith your API key from Step 1.
= (current_page) =>let apiKey = "INSERT KEY", headers = [#"powerbi-api-key" = apiKey], baseUrl = "https://recruiterflow.com/api/integrations/feed/power-bi", relativePath = "candidates", queryParameters = [ items_per_page = "100", current_page = Number.ToText(current_page) ], Source = Json.Document(Web.Contents(baseUrl, [ RelativePath = relativePath, Query = queryParameters, Headers = headers ]))in Source
To test the connection, enter
1in the current_page field and invoke the function. You should see your candidate records load.
Each page returns up to 100 records. To pull all pages automatically, add the pagination function in the next step.
Step 3: Add pagination to pull all records
Rather than invoking the function page by page, add a second blank query with this pagination function. It loops through all pages automatically and loads the full dataset into your data model.
Click New Source → Blank Query to open another query editor.
Paste the pagination function below:
= List.Generate( () => [current_page = 1, candidate = FnGetCandidates(current_page)], each not List.IsEmpty([candidate][data]), each [current_page = [current_page] + 1, candidate = FnGetCandidates(current_page)], each [candidate])
This function references FnGetCandidates — the name of the query you created in Step 2. Rename your Step 2 query to match if needed.
Available endpoints
Replace candidates in the relativePath to pull other data types:
candidates— candidate recordscontacts— contact records (non-candidate professional contacts)jobs— job recordsjobs-billing-invoices— invoices billed against jobsjobs-candidate-custom-fields— per-job custom field values for candidatesstage-movement— every stage change across all jobsdeals— deal pipeline dataclients— client company recordsplacements— placement/hiring recordscandidate/activities— activity timeline entries logged on candidatescontact/activities— activity timeline entries logged on contactsdeal/activities— activity timeline entries logged on dealscandidate/scorecard/list— interview scorecard submissions for candidates
All endpoints support items_per_page (max 100) and current_page as query parameters.
Data fields reference
Below are the fields available from each endpoint.
Candidates: id, first-name, last-name, email, phone-number, current-designation, current-organization, location, city, state, country, postal-code, street-address-1, street-address-2, source-name, tags, added-time, added-by-name, added-by-email, lead-owner-name, lead-owner-email, last-contacted, last-contact-type, last-engaged, last-engagement-type, latest-activity-time, submission-times, linkedin-profile, github-profile, twitter-profile, facebook-profile, angellist-profile, behance-profile, dribbble-profile, xing-profile, img-link, do-not-email, company-block-status, candidate.Jobs, education-details, custom-fields
Contacts: id, first-name, last-name, email, phone-number, current-designation, current-organization, client-company-name, location, city, state, country, tags, added-time, added-by-name, added-by-email, lead-owner-name, lead-owner-email, last-contacted, linkedin-profile, custom-fields
Jobs: id, name, title, department, employment-type, number-of-openings, skills, client-company-name, created-by-name, created-by-email, last-opened, candidate-sourced, candidate-applied, candidate-hired, custom-fields
Jobs Billing Invoices: id, job-id, job-name, client-company-name, due-date, amount, payment-status, created-by-name
Jobs Candidate Custom Fields: job-id, job-name, candidate-id, first-name, last-name, custom-field-name, custom-field-value
Stage Movement: prospect-id, first-name, last-name, from-stage-name, to-stage-name, stage-moved-by-name, added-time, added-by-name, added-by-email, lead-owner-name, lead-owner-email, client-company-name, source-name, current-designation, current-organization, location, city, state, country, linkedin-profile, twitter-profile, facebook-profile, github-profile, angellist-profile, behance-profile, dribbble-profile, xing-profile
Deals: id, name, deal-amount, amount-currency, deal-owner-name, client-company-name, current-stage-name, closed-date
Clients: id, name, website, industry, city, state, country, tags, added-time, added-by-name
Placements: id, candidate-id, first-name, last-name, job-id, job-name, client-company-name, placement-date, bill-amount, fee-amount, currency, placed-by-name
Candidate Activities: candidate-id, first-name, last-name, activity-type, created-by-name, created-time
Contact Activities: contact-id, first-name, last-name, activity-type, created-by-name, created-time
Deal Activities: deal-id, deal-name, activity-type, created-by-name, created-time
Candidate Scorecard List: candidate-id, first-name, last-name, job-id, job-name, interview-name, interviewer-name, overall-rating
Things to know
The API key is account-level — treat it like a password and don't share it publicly.
Each page returns a maximum of 100 records. Use the pagination function for full data pulls.
Data is pulled live from Recruiterflow each time you refresh in Power BI — there's no cached copy.
Custom fields are included in the
custom-fieldskey for candidates, contacts, jobs, and clients.





