{
  "name": "Turn a job posting into a SourceGeek sourcing project with an intake brief",
  "nodes": [
    {
      "name": "About this template",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "parameters": {
        "content": "## Turn a job posting into a sourcing project\n\nPaste a job posting link in the form and SourceGeek opens a project for it with three tasks: an intake brief from the posting, a market map of where these people work, and a first sourcing run that builds on both. The tasks start right away and report back in SourceGeek; the project link goes to Slack.\n\nCredits: each started task is one SourceGeek chat run (three per posting), plus the searches the tasks make.\n\n### Set up\n1. Install the community node **n8n-nodes-sourcegeek** (Settings → Community nodes).\n2. In SourceGeek, create an API key under Settings → Connected apps → API keys, and add it as a **SourceGeek API** credential. No account yet? [Start a free 14-day trial](https://chat.sourcegeek.com/sign-up?utm_source=n8n&utm_medium=template&utm_campaign=n8n_templates&utm_content=job-posting-to-sourcing-project).\n\nMore SourceGeek templates: https://www.sourcegeek.com/en/templates#job-posting-to-sourcing-project",
        "height": 480,
        "width": 440,
        "color": 5
      },
      "id": "fb0fe120-c43b-4734-aa66-52ca14d2a6f3",
      "position": [
        0,
        120
      ]
    },
    {
      "name": "Job posting",
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.2,
      "parameters": {
        "formTitle": "New sourcing project",
        "formDescription": "Start a SourceGeek project from a job posting.",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Job title",
              "requiredField": true
            },
            {
              "fieldLabel": "Job posting URL",
              "placeholder": "https://...",
              "requiredField": true
            },
            {
              "fieldLabel": "Notes",
              "fieldType": "textarea",
              "placeholder": "Anything the posting leaves out: salary range, must-haves, companies to avoid"
            }
          ]
        },
        "options": {}
      },
      "webhookId": "391becce-99d6-4e65-a514-dc3e4180b309",
      "id": "fa571358-e94e-47b0-a2ad-180e75e4eef6",
      "position": [
        520,
        300
      ]
    },
    {
      "name": "Plan the project",
      "type": "n8n-nodes-sourcegeek.sourcegeek",
      "typeVersion": 2,
      "parameters": {
        "resource": "project",
        "operation": "plan_tasks",
        "tasks": "={{ JSON.stringify([\n  { title: 'Intake brief: ' + $json['Job title'], description: 'Read the job posting at ' + $json['Job posting URL'] + ' and write an intake brief: the role, must-haves, nice-to-haves, location and seniority, and the questions to ask the hiring manager. Notes from the recruiter: ' + ($json.Notes || 'none') },\n  { title: 'Market map: ' + $json['Job title'], description: 'Map the companies and teams where people for this role work today, with how many there are and where they are based.', after: [1] },\n  { title: 'Sourcing: ' + $json['Job title'], description: 'Find and score the best-matching candidates for this role, using the intake brief and the market map, and save them in one sheet.', after: [1, 2] }\n]) }}",
        "additionalFields": {
          "newProject": "={{ JSON.stringify({ name: $json['Job title'], brief: 'Hiring for ' + $json['Job title'] + '. Job posting: ' + $json['Job posting URL'] + '. ' + ($json.Notes || '') }) }}"
        }
      },
      "id": "39cda33e-7618-4a77-a86b-d58d687ddfa4",
      "position": [
        760,
        300
      ]
    },
    {
      "name": "Start the tasks",
      "type": "n8n-nodes-sourcegeek.sourcegeek",
      "typeVersion": 2,
      "parameters": {
        "resource": "project",
        "operation": "start_tasks",
        "tasks": "={{ JSON.stringify($json.tasks.map(t => ({ task: t.key }))) }}"
      },
      "id": "d6a73f95-c8b4-4793-a915-e47c8795c64e",
      "position": [
        1000,
        300
      ]
    },
    {
      "name": "Post to Slack",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.3,
      "parameters": {
        "select": "channel",
        "channelId": {
          "__rl": true,
          "value": "#recruiting",
          "mode": "name"
        },
        "text": "=*New sourcing project: {{ $json.project.name }}*\n{{ $json.started.map(t => `• ${t.title}`).join('\\n') }}\n\nFollow it in SourceGeek: {{ $json.project.url }}",
        "otherOptions": {}
      },
      "id": "72eca2ce-c85a-45ae-a2a2-fd78895154d8",
      "position": [
        1240,
        300
      ]
    }
  ],
  "pinData": {},
  "connections": {
    "Job posting": {
      "main": [
        [
          {
            "node": "Plan the project",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Plan the project": {
      "main": [
        [
          {
            "node": "Start the tasks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start the tasks": {
      "main": [
        [
          {
            "node": "Post to Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "tags": []
}
