Skip to main content

Connect Recruiterflow to Power BI

Connect Recruiterflow to Microsoft Power BI using your API key to build custom reports on candidates, jobs, stage movements, and deals.

Written by Amogh Balikai

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

  1. 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

  1. In Power BI Desktop, click Get Data in the toolbar and select Blank Query. This opens the query editor.

  1. In the query editor, paste the function below. This example fetches candidate data — replace INSERT KEY with 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

  1. To test the connection, enter 1 in 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.

  1. Click New Source → Blank Query to open another query editor.

  1. 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 records

  • contacts — contact records (non-candidate professional contacts)

  • jobs — job records

  • jobs-billing-invoices — invoices billed against jobs

  • jobs-candidate-custom-fields — per-job custom field values for candidates

  • stage-movement — every stage change across all jobs

  • deals — deal pipeline data

  • clients — client company records

  • placements — placement/hiring records

  • candidate/activities — activity timeline entries logged on candidates

  • contact/activities — activity timeline entries logged on contacts

  • deal/activities — activity timeline entries logged on deals

  • candidate/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-fields key for candidates, contacts, jobs, and clients.

Did this answer your question?