{"product_id":"n8n-resume-parser-openai-gpt-4o-fit-score-to-postgres-slack","title":"n8n Resume Parser: OpenAI GPT-4o Fit Score to Postgres + Slack","description":"\u003ch3\u003eAutomatically parse resume submissions into scored candidates—save to Postgres and alert HR in Slack\u003c\/h3\u003e\n\u003cp\u003eThis n8n workflow captures PDF resumes from an \u003cstrong\u003en8n Form\u003c\/strong\u003e, extracts and structures candidate data with \u003cstrong\u003eOpenAI (gpt-4o-mini)\u003c\/strong\u003e, computes a simple fit score, writes the results to \u003cstrong\u003ePostgreSQL\u003c\/strong\u003e, and posts a concise update to \u003cstrong\u003eSlack\u003c\/strong\u003e for your HR team.\u003c\/p\u003e\n\n\u003ch3\u003eWhat this workflow does\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eReceives a candidate submission via an \u003cstrong\u003en8n Form trigger\u003c\/strong\u003e, including a `PDF` resume attachment.\u003c\/li\u003e\n  \u003cli\u003eUploads the resume to a selected \u003cstrong\u003eGoogle Drive\u003c\/strong\u003e folder and extracts resume text from the uploaded PDF.\u003c\/li\u003e\n  \u003cli\u003eSends the extracted resume text to \u003cstrong\u003eOpenAI (gpt-4o-mini)\u003c\/strong\u003e to return key candidate fields as \u003cstrong\u003eJSON\u003c\/strong\u003e.\u003c\/li\u003e\n  \u003cli\u003eParses, cleans, and normalizes fields—such as name casing, email formatting, and numeric experience years.\u003c\/li\u003e\n  \u003cli\u003eCalculates a candidate \u003cstrong\u003efit score\u003c\/strong\u003e based on experience and the presence of specific skills: \u003cstrong\u003eReact\u003c\/strong\u003e, \u003cstrong\u003eNode.js\u003c\/strong\u003e, and \u003cstrong\u003ePostgreSQL\u003c\/strong\u003e.\u003c\/li\u003e\n  \u003cli\u003eInserts the structured candidate record and score into a \u003cstrong\u003ePostgreSQL\u003c\/strong\u003e table (e.g., \u003ccode\u003epublic.candidates\u003c\/code\u003e) with columns matching the workflow mappings.\u003c\/li\u003e\n  \u003cli\u003ePosts a \u003cstrong\u003eSlack\u003c\/strong\u003e message to an HR channel containing candidate details and the computed score.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eUse cases\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eTurn inbound recruitment form submissions into a structured candidate pipeline without manual copy\/paste.\u003c\/li\u003e\n  \u003cli\u003eScore applicants consistently using the same resume-parsing prompt and skill checks (React, Node.js, PostgreSQL).\u003c\/li\u003e\n  \u003cli\u003eGive HR an immediate Slack notification with a ready-to-review candidate summary and fit score.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eTechnical details\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003en8n Form trigger\u003c\/strong\u003e for resume intake\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eGoogle Drive\u003c\/strong\u003e for storage (folder selection via OAuth)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eOpenAI (gpt-4o-mini)\u003c\/strong\u003e for structured JSON extraction\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCode\u003c\/strong\u003e steps for parsing\/normalization and fit score calculation\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003ePostgreSQL\u003c\/strong\u003e insertion into \u003ccode\u003epublic.candidates\u003c\/code\u003e\n\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSlack\u003c\/strong\u003e OAuth + HR channel notification\u003c\/li\u003e\n  \u003cli\u003e(Includes workflow helpers such as a \u003cstrong\u003eSticky Note\u003c\/strong\u003e)\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"N8N Commerce","offers":[{"title":"Default Title","offer_id":46018914549939,"sku":"N8N-19560","price":3.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0749\/6279\/6723\/files\/osz-v28-MMtUsYA2tGN2n_wrv2U0NM.png?v=1789376518","url":"https:\/\/buyflowscripts.com\/products\/n8n-resume-parser-openai-gpt-4o-fit-score-to-postgres-slack","provider":"N8N Commerce","version":"1.0","type":"link"}