Intermediate~15 min setupProductivity & FormsVerified April 2026
Notion logo
Typeform logo

How to Build Job Application Tracker with Pipedream

Automatically create Notion database entries when candidates submit Typeform job applications with their details and resume links.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

Best for

HR teams and startups who want instant candidate tracking without manual data entry

Not ideal for

Companies requiring complex approval workflows or ATS integrations before candidate entry

Sync type

real-time

Use case type

import

Real-World Example

💡

A 25-person startup receives 40-60 applications per week through their careers page Typeform. Before automation, the HR manager copied candidate details into Notion manually twice per day, often missing applications for 4-6 hours. Now applications appear in their hiring pipeline within 30 seconds.

What Will This Cost?

Drag the slider to your expected monthly volume.

/mo
505005K50K

Each platform counts differently — Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.

Prices shown for annual billing. Based on published pricing as of April 2026.

Estimated ROI

1000

min saved/mo

$583

labor value/mo

Free

no platform cost

Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.

Implementation

Skip the setup

Import this workflow directly into Pipedream

Copy the pre-built Pipedream blueprint and paste it straight into Pipedream. All modules, filters, and field mappings are already configured — you just need to connect your accounts.

Before You Start

Make sure you have everything ready.

Typeform with file upload field enabled (requires paid plan)
Notion database set up with Name, Email, Resume URL, and Status properties
Notion integration permissions for the workspace containing your hiring database
Typeform webhook permissions (available on Essentials plan and above)

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Candidate Name
Email Address
Resume File URL
Position Applied For
Application Status
3 optional fields▸ show
Years of Experience
Cover Letter
Phone Number

Step-by-Step Setup

1

Workflows > New > Sources > Typeform

Set up Typeform webhook source

Go to pipedream.com and click New Workflow. Select Typeform as your trigger source. Choose 'New Response' as the trigger event. You'll see a unique webhook URL generated instantly. Copy this URL - you'll paste it into Typeform in the next step.

  1. 1Click 'New Workflow' from the Pipedream dashboard
  2. 2Select 'Typeform' from the trigger source list
  3. 3Choose 'New Response' as the event type
  4. 4Copy the generated webhook URL
What you should see: You should see a unique webhook URL starting with https://eoxxx.m.pipedream.net
Common mistake — Don't test the trigger yet - Typeform needs to be configured first or you'll get empty test data
2

Typeform > Connect > Webhooks

Configure Typeform webhook

Open your Typeform job application form and go to Connect panel. Click Webhooks and paste the Pipedream URL. Set it to send on form submission. Make sure your form captures name, email, resume file upload, and at least 2-3 application questions you want in Notion.

  1. 1Open your job application Typeform
  2. 2Click the 'Connect' tab at the top
  3. 3Select 'Webhooks' from the integration list
  4. 4Paste your Pipedream webhook URL
  5. 5Enable 'Send on form completion'
What you should see: You should see 'Webhook active' status with a green indicator next to your URL
Common mistake — File upload fields in Typeform send download URLs that expire in 30 days - not permanent storage links
3

Your Typeform > Preview & Test

Generate test data

Submit a test application through your Typeform using realistic data. Include a resume file upload and answer all required questions. This creates sample data that Pipedream will use for mapping fields to Notion. The webhook should fire within 10-15 seconds of submission.

  1. 1Click 'Preview' on your Typeform
  2. 2Fill out all fields with realistic test data
  3. 3Upload a PDF resume file
  4. 4Submit the form
  5. 5Return to Pipedream to check for the webhook event
What you should see: You should see the test submission appear in Pipedream's trigger step with all form field data visible
Pipedream
▶ Deploy & test
executed
Notion
Typeform
Typeform
🔔 notification
received
4

Workflow > Add Step > Notion > Create Page

Connect Notion integration

Click 'Add Step' in your Pipedream workflow and search for Notion. Select 'Create Page' action. You'll be prompted to authenticate with Notion - make sure you grant access to the workspace containing your hiring database. Select the specific database where you want candidate records created.

  1. 1Click the blue '+ Add Step' button
  2. 2Search for 'Notion' and select it
  3. 3Choose 'Create Page' action
  4. 4Click 'Connect Account' and authenticate with Notion
  5. 5Select your hiring database from the dropdown
What you should see: You should see your Notion databases listed and selectable in the Database dropdown
Common mistake — If your database doesn't appear, check that the Notion integration has access to the correct workspace and pages
5

Notion Step > Properties > Name/Email

Map candidate name and email

In the Notion step configuration, you'll see property fields matching your database schema. Map the candidate's name to your Name property by clicking the field and selecting the name response from Typeform data. Do the same for email address. These usually come from Typeform as 'text_xxxxx' fields.

  1. 1Click in the 'Name' property field
  2. 2Select the name field from Typeform response data
  3. 3Click in the 'Email' property field
  4. 4Select the email field from Typeform response data
  5. 5Verify the field mapping shows correct sample data
What you should see: You should see the test candidate's name and email appear in the property preview
Common mistake — Typeform field IDs change if you edit the form structure, breaking existing mappings
Notion fields
Name
Status
Assignee
Due Date
Priority
available as variables:
1.props.Name
1.props.Status
1.props.Assignee
1.props.Due Date
1.props.Priority
6

Notion Step > Properties > Resume URL

Map resume file link

Find your resume upload field in the Typeform data - it will be a file_url property. Map this to a URL property in your Notion database. If you don't have a URL property, you can map it to a rich text field instead. The link will be clickable in Notion for downloading resumes.

  1. 1Locate the file_url field in Typeform response data
  2. 2Click your Resume or File URL property in Notion
  3. 3Select the file_url from the Typeform data
  4. 4Verify the resume download link appears in preview
What you should see: You should see the resume download URL populated in the Notion property field
Common mistake — Typeform file URLs expire after 30 days, so download and re-upload important resumes to permanent storage
7

Notion Step > Properties > Custom Fields

Map application responses

Map the remaining Typeform responses to corresponding Notion properties. Common fields include position applied for, years of experience, salary expectations, and cover letter. Each Typeform question appears as a separate field in the webhook data. Match them to your database schema.

  1. 1Identify each question response in Typeform data
  2. 2Map position/role field to your Position property
  3. 3Map experience level to Years Experience property
  4. 4Map any text responses to Multi-line Text properties
  5. 5Map single-select responses to Select properties
What you should see: All your Notion database properties should show mapped Typeform values in the preview
8

Notion Step > Properties > Status

Set default pipeline status

Set a default status for new applications in your Notion database. This is usually a Select property like 'Application Status' that you'll set to 'New' or 'Under Review'. You can hardcode this value rather than mapping it from Typeform since all new applications start at the same stage.

  1. 1Find your Status or Pipeline Stage property
  2. 2Click the field and select 'Custom Value'
  3. 3Type 'New Application' or your default status
  4. 4Set any other default values like date received
What you should see: The Status field should show your default value like 'New Application'
Common mistake — Make sure the status value exactly matches an option in your Notion Select property or the step will fail
9

Workflow > Deploy > Test

Test the complete workflow

Click 'Deploy' to activate your workflow, then submit another test application through your Typeform. Check your Notion database within 30 seconds to see if the new candidate page was created correctly. Verify all fields populated properly and the resume link works.

  1. 1Click 'Deploy' to make the workflow live
  2. 2Submit a new test application via Typeform
  3. 3Check your Notion database for the new entry
  4. 4Click the resume link to verify it downloads
  5. 5Review all mapped fields for accuracy
What you should see: You should see a new candidate page in Notion with all form data properly populated
Common mistake — If the page creation fails, check the Pipedream execution logs for specific error details about field mapping issues

Add this code step after Typeform trigger to automatically download resume files and upload them to permanent cloud storage, preventing the 30-day Typeform URL expiration issue.

JavaScript — Code Stepimport axios from 'axios'
▸ Show code
import axios from 'axios'
import FormData from 'form-data'
export default defineComponent({

... expand to see full code

import axios from 'axios'
import FormData from 'form-data'

export default defineComponent({
  async run({ steps, $ }) {
    const resumeUrl = steps.trigger.event.form_response.file_url
    const candidateName = steps.trigger.event.form_response.candidate_name
    
    if (!resumeUrl) {
      return { permanent_url: null }
    }
    
    try {
      // Download file from Typeform
      const fileResponse = await axios.get(resumeUrl, {
        responseType: 'stream',
        timeout: 30000
      })
      
      // Upload to your permanent storage (example: AWS S3)
      const fileName = `resumes/${candidateName.replace(/\s+/g, '_')}_${Date.now()}.pdf`
      
      const formData = new FormData()
      formData.append('file', fileResponse.data)
      formData.append('fileName', fileName)
      
      const uploadResponse = await axios.post('YOUR_STORAGE_ENDPOINT', formData, {
        headers: {
          ...formData.getHeaders(),
          'Authorization': 'Bearer YOUR_TOKEN'
        }
      })
      
      return {
        permanent_url: uploadResponse.data.file_url,
        original_url: resumeUrl,
        file_name: fileName
      }
      
    } catch (error) {
      console.error('File upload failed:', error)
      return {
        permanent_url: resumeUrl, // Fallback to original
        error: error.message
      }
    }
  }
})

Going live

Production Checklist

Before you turn this on for real, confirm each item.

Troubleshooting

Common errors and how to fix them.

Frequently Asked Questions

Common questions about this workflow.

Analysis

VerdictWhy n8n for this workflow

Use Pipedream for this if you need instant webhook processing and want to add custom logic like file handling or duplicate detection. The platform excels at real-time form processing and gives you Node.js flexibility for complex data transformations. Skip it if your team needs a visual workflow builder - Zapier's interface is more approachable for non-technical users.

Cost

This workflow costs nothing until you hit 10,000 invocations per month on Pipedream's free tier. At 200 applications/month, you'll stay free indefinitely. Zapier charges after 100 tasks ($20/month), and Make starts billing at 1,000 operations ($9/month). For hiring workflows, Pipedream wins on cost unless you're processing thousands of applications monthly.

Tradeoffs

Zapier handles Typeform-to-Notion connections with zero setup complexity and better error handling out of the box. Make offers superior visual debugging when field mapping goes wrong. n8n gives you more advanced file processing capabilities for resume parsing. Power Automate integrates better if you're already using Microsoft's ecosystem. But Pipedream's instant webhook processing beats all competitors - your candidates appear in Notion within 15 seconds instead of 2-15 minutes.

You'll discover that Typeform file URLs expire in 30 days, breaking resume access unless you download them immediately. Notion's API occasionally fails on Select property validation if your status values don't match exactly. Some candidates submit forms multiple times, creating duplicate entries that mess up your pipeline tracking. Plan for these issues upfront.

Ideas for what to build next

  • Add interview scheduling automationConnect Calendly or Google Calendar to automatically send interview invites when status changes to 'Phone Screen'.
  • Set up hiring manager notificationsAdd Slack or email notifications to alert specific team members when applications arrive for their department.
  • Build candidate rejection workflowCreate follow-up automation to send personalized rejection emails from Notion status changes with email templates.

Related guides

Was this guide helpful?
Notion + Typeform overviewPipedream profile →