# Account & billing Source: https://docs.jobbeacon.app/guides/account-billing Manage your account, plan, billing, appearance, and language. ## Your account JobBeacon uses [Clerk](https://clerk.com) for account management. From your avatar menu, use your account profile to: * Change your account email * Change your password * Add or remove sign-in methods * Enable two-factor authentication * Delete your account Email notifications use your notification email override when you set one. Otherwise, they use your account email. ## Notification email Use **Settings** -> **Notification Email** if alerts should go to a different email address than your account email. Leave the field empty to use your account email. ## Appearance and language In **Settings**, you can choose: * Light mode * Dark mode * System mode * Language Your choices follow you across devices. ## Plans Watch up to 5 companies with daily checks, daily email per company, 2 keywords, and 1 location per company. Watch unlimited companies with unlimited filters, faster checks, immediate email, outbound webhooks, and manual polling. Current pricing lives on the [pricing page](https://jobbeacon.app/#pricing). ## Plan differences | Feature | Free | Pro | | ------------------------------- | ----------------- | ------------------------- | | Watched companies | Up to 5 | Unlimited | | Job checks | At least daily | At least every 30 minutes | | Email delivery | Daily per company | Immediate | | Keywords per company | 2 | Unlimited | | Locations per company | 1 | Unlimited | | Outbound webhooks | Not included | Included | | Manual **Poll Now** after setup | Not included | Included | ## Upgrade to Pro Click your avatar, then click **Settings**. Find the **Plan & Billing** card. Choose monthly or quarterly billing. JobBeacon opens Stripe Checkout. Stripe handles payment and returns you to JobBeacon. Your Pro limits apply after checkout completes. ## Manage your subscription From **Settings** -> **Plan & Billing**, click **Manage subscription**. Stripe opens its customer portal, where you can: * Update your payment method * Download invoices * Cancel your subscription If you are already on Pro, you can switch between monthly and quarterly billing from **Plan & Billing** when the subscription is active. Cancellation takes effect at the end of the current billing period. You keep Pro access until then. ## If Pro ends If your account moves from Pro to Free: * Company and filter limits apply again. * Manual **Poll Now** is no longer available after setup. * Outbound webhook delivery pauses. * Your saved webhook endpoint and signing secret stay saved. If you are over a Free limit, update your watchlist or filters before adding more companies or filters. ## Delete your account Account deletion permanently removes: * Watched companies * Filters * Notification preferences * Job history * Manual share links * Webhook settings and delivery history If you have an active Pro subscription, JobBeacon attempts to cancel it and refund the unused part of the current billing period during account deletion. This cannot be undone. # Adding companies Source: https://docs.jobbeacon.app/guides/adding-companies Add a company to your watchlist with a careers URL. You add a company by pasting a URL. JobBeacon detects the hiring platform when it can, saves the company to your watchlist, and runs the first scan. ## What URLs work Use either the company's careers page or a direct job board URL. Direct job board URLs are usually fastest: * `https://job-boards.greenhouse.io/{company}` or `https://boards.greenhouse.io/{company}` * `https://jobs.ashbyhq.com/{company}` * `https://jobs.lever.co/{company}` * `https://{company}.wd{N}.myworkdayjobs.com/...` * `https://{company}.eightfold.ai/...` * `https://careers.smartrecruiters.com/{company}` * `https://{company}.bamboohr.com/careers` * `https://apply.workable.com/{company}` * `https://myjobs.adp.com/{company}/...` * Oracle Recruiting, iCIMS, and SAP SuccessFactors career site URLs Company careers pages can also work. If you paste a page like `https://example.com/careers`, JobBeacon checks the page for links to supported job boards and tries common board URLs based on the company domain. See [Supported platforms](/guides/supported-platforms) for the full list. ## Add a company From the dashboard, click **Add company**. Use the company careers page or a direct job board URL. Add keywords and locations before the first scan. You can always change filters later. JobBeacon validates the URL and saves the company. JobBeacon imports jobs already listed on the board. The scan usually takes a few seconds. Very large boards can take longer. Existing jobs from the first scan are seed jobs. They can appear in your dashboard, but they do not send email or webhook delivery. Only jobs found after the first scan can trigger delivery. ## When JobBeacon needs confirmation Sometimes JobBeacon finds more than one possible company for the URL you pasted. When that happens, you see **Is this the right company?** with a list of candidates. For each candidate, you can: * Click **View career site** to open the board and confirm it is the right company. * Click **Yes, track this** to add that company. * Click **None of these** if the suggestions are wrong. Candidates with no open roles are labeled. You can still track one. JobBeacon will keep watching for future roles. ## If nothing matches If JobBeacon cannot detect the company: 1. Open the company's careers page yourself. 2. Look for a button or link like "Open roles", "View jobs", or "Search jobs". 3. Paste the URL that link opens. 4. Try the direct job board URL if you can find it. If you still cannot add the company, [email support](mailto:support@jobbeacon.app) with the URL. ## Duplicate companies JobBeacon does not let you add the same company board twice. If you see "You are already monitoring this company", open the existing company from your dashboard and update its filters instead. ## Plan limits Free accounts can watch up to 5 companies. Pro accounts can watch unlimited companies. Free accounts can add up to 2 keywords and 1 location per company. Pro accounts can use unlimited keywords and locations. See [Account & billing](/guides/account-billing) for plan details. ## Poll now The first scan runs when you add a company. After that, JobBeacon checks companies automatically. Pro users can click **Poll Now** on a company page to check a company immediately. ## Remove a company Open the company page and click **Remove**. This removes the company from your watchlist and deletes JobBeacon's tracked history for that company. It does not affect the company's real careers page. # Dashboard Source: https://docs.jobbeacon.app/guides/dashboard Use company cards and matched jobs to see what JobBeacon found. Your dashboard has two views: * **Companies** shows every company on your watchlist. * **Jobs** shows matching jobs across all watched companies. Use **Add company** when you want JobBeacon to start watching another company. ## Companies view The **Companies** view is the fastest way to check your watchlist. Each company card shows: * The company name and logo * A **New** marker when JobBeacon found a non-seed job in the last 24 hours * The number of active jobs matching your filters * Your current keyword and location filters * When JobBeacon last searched that company Click a company card to open the company page. ## Jobs view The **Jobs** view collects matching jobs from all watched companies into one table. Use it when you want to scan everything JobBeacon has found without opening each company one by one. The table shows: * The role title * The company * The location * When JobBeacon found the job * A link to the original posting Jobs marked **New match** were found in the last 24 hours and were not part of the first scan. Jobs marked as found when added were already live when you added the company. They can appear in your matched jobs list, but they do not trigger email or webhook delivery. ## Company pages Open a company to manage that company in detail. From the company page you can: * Review matching jobs * Search matching jobs by title when there are many results * Open the original posting * Share a job link or share image * Edit the company display name * Change filters * Mute email for that company * Remove the company from your watchlist If a company has a very large board, JobBeacon may show a note like "Monitoring the 1,000 most recent of N listings." New postings are still detected. ## Locations in job tables Some jobs list more than one location. JobBeacon condenses long location lists in the table. Hover or focus the location cell to see the full list. For some Workday jobs, the table may show a value like `5 Locations`. Hover or focus the cell to load the location list when JobBeacon can fetch it. ## Poll now JobBeacon checks companies automatically. Pro users can also click **Poll Now** on a company page to check that company immediately. The first scan after adding a company is available on all plans. Later manual polling is a Pro feature. ## Empty states If the dashboard is empty, add your first company. If a company has no matched jobs, either JobBeacon has not found jobs yet or your filters are too narrow. Check the company filters and the next scheduled scan. # FAQ Source: https://docs.jobbeacon.app/guides/faq Quick answers to common JobBeacon questions. Free companies are checked at least daily. Pro companies are checked at least every 30 minutes. Pro users can also click **Poll Now** on a company page to check immediately. The most common reasons are: 1. The jobs were already live during the first scan. Seed jobs do not send email. 2. Email was muted globally or for that company. 3. Your account is on Free and an email for that company was already sent in the last day. 4. The jobs did not match your filters when JobBeacon first saw them. Check the company's filters. Keywords match job titles only. Locations match the job location field. A job must pass both filters. If a filter is empty, that filter passes everything. Some Workday listings do not expose all locations in the main job list. JobBeacon shows values like `5 Locations` and loads the full list when you hover or focus the location cell when possible. If you use location filters, turn on **Include unspecified locations** to include these jobs. Yes, on Pro. Use [Webhooks](/webhooks) to send one signed JSON payload for each newly matched job. You can connect that endpoint to tools like Slack, Notion, Airtable, Zapier, Make, or your own app. Check these first: 1. Your account is on Pro. 2. The webhook is active in **Settings**. 3. The endpoint uses HTTPS and returns `2xx`. 4. The job was new, not part of the first scan. 5. The job matched filters when JobBeacon first saw it. Review **Recent deliveries** in Settings for status and errors. No. Email notification settings only control email. Webhooks have their own active switch in **Settings**. Yes. Click the share icon on a job row. The recipient gets a public job preview and does not need a JobBeacon account. See [Sharing jobs](/guides/sharing). JobBeacon filters many link previews and bot visits from share view counts. Repeated views from the same visitor in a short window may also be counted once. No. JobBeacon watches company career pages and supported hiring platforms. It does not watch aggregators like LinkedIn or Indeed. Try to find the company's actual job board link from the careers page and paste that URL. If it still does not work, [email support](mailto:support@jobbeacon.app) with the URL. No. JobBeacon is a web app. It works in mobile browsers, and email is designed to be readable on a phone. No. JobBeacon helps you find new postings. You still apply on the company's own career site. JobBeacon deletes your watched companies, filters, job history, notification preferences, manual share links, and webhook settings. See [Account & billing](/guides/account-billing#delete-your-account). Yes. Open [status.jobbeacon.app](https://status.jobbeacon.app) to check API and polling status. Email [support@jobbeacon.app](mailto:support@jobbeacon.app). Include the company name or URL if the issue is about detection, polling, filters, email, or webhook delivery. # Filters Source: https://docs.jobbeacon.app/guides/filters Use keywords and locations to decide which jobs match. Filters decide which jobs count as matches for a company. Each company has its own filters. A job must pass both the keyword filter and the location filter to count as a match. An empty filter matches everything. ## Plan limits Free accounts can use up to 2 keywords and 1 location per company. Pro accounts can use unlimited keywords and locations. ## Keywords Keywords match against the job title. They do not match the job description, department, or requirements. ### Any vs all Choose one mode: * **Any** matches when at least one keyword appears. * **All** matches only when every keyword appears. Use **Any** for related role families: ```text theme={null} backend, infrastructure, platform ``` Use **All** for narrowing: ```text theme={null} senior, backend ``` ### Keyword matching Keyword matching is case-insensitive. JobBeacon also ignores common separators, so these can match each other: | Filter | Matches | | ------------------ | -------------------------------------------------------------- | | `full-stack` | "Full Stack Engineer", "Fullstack Developer", "full-stack ops" | | `senior` | "Senior Engineer", "SENIOR PRODUCT DESIGNER" | | `product designer` | "Product Designer", "Senior Product Designer" | Multi-word keywords match as a phrase. `product designer` does not match "Product Manager, Designer Tools." ## Locations Locations match against the job's location field. They use the same **Any** and **All** modes as keywords. Use **Any** when any listed location is acceptable: ```text theme={null} Remote, Berlin, New York ``` Use **All** only when the job location must contain every location value. This is uncommon, but it can help with location strings that contain both city and region. ## Multi-location jobs Many jobs list several locations, such as: ```text theme={null} London | Berlin | Remote ``` A `Berlin` filter matches that job because `Berlin` appears in the location list. In job tables, JobBeacon may condense long location lists. Hover or focus the location cell to see the full list. ## Unspecified locations Some jobs do not expose a specific location. Examples include: * Empty location fields * `N/A` * `Unspecified` * Workday values like `5 Locations` By default, these do not match a location filter. Turn on **Include unspecified locations** when you want those jobs included while a location filter is active. If you have no location filter, this setting has no effect. ## Examples * Keywords: `backend`, `infrastructure`, `platform` * Keyword mode: **Any** * Locations: `Remote` * Location mode: **Any** * Include unspecified locations: **Off** * Keywords: empty * Locations: `Berlin` * Location mode: **Any** * Include unspecified locations: **Off** * Keywords: `senior`, `product designer` * Keyword mode: **All** * Locations: empty * Keywords: `engineer` * Keyword mode: **Any** * Locations: `Remote`, `Santa Clara` * Location mode: **Any** * Include unspecified locations: **On** ## Edit filters Click the company from the dashboard. The filters panel appears beside the jobs table on desktop and below it on smaller screens. Add or remove values and choose **Any** or **All**. Save the section you changed. Changing filters updates the visible matched count and matched jobs list. It does not send email or webhook backfill for jobs JobBeacon already saw. ## See what matched The dashboard shows a matched job count for each company. Open the **Jobs** view to see matched jobs across all companies. Open a company page to see that company's matched jobs, search by title, and share or open postings. # Email notifications Source: https://docs.jobbeacon.app/guides/notifications How email alerts work and how to control them. JobBeacon sends notifications by email. Webhook delivery is separate. See [Webhooks](/webhooks) if you want matched jobs sent to another tool. ## How email alerts work * JobBeacon checks each company on a schedule. * New jobs are compared with that company's filters. * If one or more jobs match, JobBeacon sends one email for that company. * If nothing matches, no email is sent. Free accounts receive at most one email per company per day. Pro accounts receive email immediately when matching jobs are found. The email usually comes from `notifications@updates.jobbeacon.app`. ## What an email includes An email includes: * The company name * The matching role titles * Job locations when available * Links to the original job postings * A link back to the company page in JobBeacon If several new roles match at the same company, they are grouped into one email. ## Email address By default, JobBeacon sends email to your account email. To use a different email address: Click your avatar, then click **Settings**. Enter the email address you want to receive alerts. Click **Save**. Leave the field empty to use your account email again. ## Control email globally Open **Settings** and use the **Email Notifications** switch. When you turn the main switch off, JobBeacon pauses email for all companies. When you turn it on, JobBeacon turns email back on for your companies. You can also use **Mute all** and **Unmute all** in the same card when you have several companies. ## Control email per company You can mute one company without muting the rest. Use either place: * Company page: use the email notification switch in the **Filters** panel. * Settings: use the company switch in **Email Notifications**. If global email is off and you turn one company on, JobBeacon turns global email back on too. ## Pausing email does not stop tracking Muting email does not stop JobBeacon from checking companies. New jobs can still appear in your dashboard while email is muted. When you turn email back on, JobBeacon does not send a backfill email for jobs found while muted. ## I am not getting email Check these first: 1. **Email Notifications** in Settings is active. 2. The company is active in **Email Notifications** or on the company page. 3. Your filters are not too narrow. 4. Your notification email is correct. 5. Search spam or promotions for `updates.jobbeacon.app`. 6. If you are on Free, check whether an email for that company was already sent in the last day. If none of that helps, [email support](mailto:support@jobbeacon.app). ## I am getting too much email Try these: * Tighten your filters with more specific keywords or locations. * Mute noisy companies. * Remove companies you no longer care about. * Upgrade to Pro only if you want faster delivery, not less email. # Sharing jobs Source: https://docs.jobbeacon.app/guides/sharing Share job previews, links, images, and view history. You can share a job without making the recipient sign up for JobBeacon. Shared jobs open on a public JobBeacon preview page with a link to the original posting. ## Share from a company page Find the job in the matched jobs table. Click the share icon on the job row. Pick the share action you want. Available actions: * **Share link** opens the native share sheet on supported mobile browsers, or copies the link on desktop. * **Copy link** copies the public share URL. * **Copy image** copies the generated share image when your browser supports it. Otherwise JobBeacon copies the image link. * **Download image** downloads the generated share image. The share link looks like: ```text theme={null} https://jobbeacon.app/share/{token} ``` ## What the recipient sees The public share page shows: * The job title * The company * The location when available * A direct link to the original posting * A preview image for apps that unfurl links The recipient does not need a JobBeacon account. They cannot see your watchlist, filters, email settings, or account details. ## Share history Open your avatar menu and click **Share history** to review links you created from the app. Share history shows: * Total shared jobs * Total views * Jobs that no longer appear on the company board * When each link was shared * When each link was last viewed From share history, you can copy the link again, copy or download the share image, open the share page, or open the original posting if it is still active. Webhook-generated share links are not shown in share history. ## View counts JobBeacon counts likely human browser views. Link previews, bots, and repeated views from the same visitor in a short window may not increase the count. Use view counts as a directional signal, not an exact analytics report. ## When a job is no longer active If the company removes a job from its board, JobBeacon keeps the share record. The public share page says the job is no longer valid, and share history marks it as **No longer valid**. The original posting link is disabled in share history when JobBeacon knows the job is no longer active. ## Privacy and limitations * Share links use unguessable tokens. * Anyone with the link can open the public share page. * JobBeacon reuses the same manual share link when you share the same job again. * There is no self-serve way to revoke a share link today. If you need a link revoked, [email support](mailto:support@jobbeacon.app). # Supported platforms Source: https://docs.jobbeacon.app/guides/supported-platforms The hiring platforms JobBeacon can watch. JobBeacon watches company career pages that are powered by supported hiring platforms. If a company uses a custom careers page with no supported job board behind it, JobBeacon usually cannot watch it. ## Supported boards URL patterns: `job-boards.greenhouse.io/{slug}`, `boards.greenhouse.io/{slug}` URL pattern: `jobs.ashbyhq.com/{slug}` URL pattern: `jobs.lever.co/{slug}` URL pattern: `{company}.wd{N}.myworkdayjobs.com/...` URL patterns: `{company}.eightfold.ai/...`, `apply.careers.{company}.com/...` URL patterns: `careers.smartrecruiters.com/{slug}`, `jobs.smartrecruiters.com/{slug}` URL pattern: `{slug}.bamboohr.com/careers` URL pattern: `apply.workable.com/{slug}` URL pattern: `myjobs.adp.com/{slug}/...` URL pattern: `fa-...fa.ocs.oraclecloud.com/hcmUI/CandidateExperience/.../sites/{site}` URL patterns vary, often on an `icims.com` domain or branded careers domain. URL pattern: often `jobs.{company}.com/search` JobBeacon can also handle some companies that publish jobs across multiple Greenhouse boards. ## Platform caveats Most supported boards work the same way: JobBeacon imports active jobs, stores title, location, and apply URL, then checks for new jobs on later scans. A few cases affect what you see. ### Workday locations Some Workday jobs show a value like `5 Locations` in the job table. Hover or focus the location cell to load the full location list when JobBeacon can fetch it. Location filters cannot always match these Workday multi-location values directly. Turn on **Include unspecified locations** if you want those jobs included when a location filter is active. ### Large boards Some large boards are capped to the most recent 1,000 jobs. If a cap applies, the company page shows a message like "Monitoring the 1,000 most recent of N listings." New postings are still detected because JobBeacon checks the most recent listings. ### Companies with no open roles Some supported boards have zero open roles when you add them. You can still watch the company. JobBeacon will keep checking and show new roles when they appear. ## What JobBeacon does not watch JobBeacon does not watch: * LinkedIn, Indeed, or other job aggregators * Internal job boards behind a company login * Custom in-house career pages with no supported hiring platform * PDFs, spreadsheets, or plain HTML listings with no structured job source JobBeacon focuses on the company's own posting source. ## If a company is not supported If a company you care about is not supported, [email support](mailto:support@jobbeacon.app) with the careers URL. Include the exact URL you tried. If the company links to a separate "open roles" page, include that URL too. # Welcome to JobBeacon Source: https://docs.jobbeacon.app/index Get notified when companies post jobs that match your search. JobBeacon watches company career pages for you. Add the companies you care about, set role and location filters, and get email when a matching job appears. Pro users can also send matched jobs to their own tools with outbound webhooks. Set up your first watched company in a few minutes. Review your watched companies and matched jobs. Paste a careers URL and let JobBeacon detect the company. Match jobs by title keywords and locations. Control global and per-company email. Send matched jobs to automation tools on Pro. Share job previews, images, and links. Manage plans, billing, email, language, and account settings. ## How it works Paste a careers page URL or a direct job board URL. JobBeacon detects supported hiring platforms automatically when it can. Add keywords like `backend` or `product designer`, and locations like `Remote`, `Berlin`, or `Taiwan`. JobBeacon checks each company on a schedule. The first scan seeds existing jobs silently. Only jobs found after that can trigger delivery. Matching jobs appear in your dashboard. JobBeacon sends email, and Pro webhooks if you have enabled them. ## What JobBeacon is for JobBeacon is best when you already know the companies you care about. It is not a broad job marketplace. It watches the sources you choose and tells you when those companies add roles that match your filters. Watch specific companies instead of relying on a feed. Use different keywords and locations for each company. Get one email per company when matching jobs are found. Send signed webhook payloads for each matched job. JobBeacon watches many common company job boards, including Greenhouse, Workday, Ashby, Lever, and more. Share public job pages, copy share images, and track manual share history. Walk through the first setup. # Quickstart Source: https://docs.jobbeacon.app/quickstart Set up your first company watch in a few minutes. By the end of this guide, you will be watching at least one company and have email notifications ready. ## 1. Create your account Open [jobbeacon.app](https://jobbeacon.app) and click **Get started**. You can sign up with email or Google. JobBeacon sends email notifications to your account email unless you set a notification email override later. The Free plan is enough to try JobBeacon with up to 5 companies. You can upgrade later from **Settings**. ## 2. Add your first company You only need a URL. From the app, click **Add company**. Use the company's careers page or a direct job board URL. Examples: * `https://vercel.com/careers` * `https://job-boards.greenhouse.io/acmecorp` * `https://jobs.lever.co/acmecorp` * `https://acmecorp.wd1.myworkdayjobs.com/Acme_Careers` Add keywords and locations now, or leave them blank and edit them later. JobBeacon detects the company and starts the first scan. The first scan imports jobs already on the company board. These jobs are marked as seed jobs. They can appear in your dashboard, but they do not send email or webhook delivery. If JobBeacon asks **Is this the right company?**, open the suggested career site, confirm the correct one, or choose **None of these**. ## 3. Review your dashboard After the first scan, JobBeacon takes you to the company page. Use the company page to: * Review matching jobs * Open original job postings * Share jobs * Edit filters * Mute email for that company Return to **Dashboard** to switch between **Companies** and **Jobs** views. See [Dashboard](/guides/dashboard) for details. ## 4. Set useful filters Filters are optional. Without filters, every active job at that company matches. For most companies, add at least one keyword or location. Click the company from the dashboard. Keywords match the job title. Examples: * `backend` * `infrastructure` * `product designer` * `senior` Locations match the job location field. Examples: * `Remote` * `Berlin` * `New York` * `Taiwan` Choose **Any** when one value is enough. Choose **All** when every value must match. Click **Save** in each filter section you change. See [Filters](/guides/filters) for examples and plan limits. ## 5. Confirm email notifications Click your avatar, then click **Settings**. Make sure the main **Email Notifications** switch is active. Confirm the companies you care about are active. In **Notification Email**, enter an override if alerts should go somewhere other than your account email. Free accounts receive at most one email per company per day. Pro accounts get immediate email when a matching job is found. ## 6. Optional: set up webhooks on Pro If you want matched jobs sent to another tool, use [Webhooks](/webhooks). Webhooks are Pro-only and separate from email notifications. ## What's next? Build out your company watchlist. Reduce noise with better keywords and locations. Send a public preview or share image. Find answers to common questions. # Webhooks Source: https://docs.jobbeacon.app/webhooks Send newly matched jobs to your own tools with signed webhook delivery. Outbound webhooks are a Pro feature. They send one signed `POST` request for each newly matched job. Use webhooks when you want matched jobs to flow into tools like Slack, Notion, Airtable, Zapier, Make, or your own workflow. Email notification settings do not control webhook delivery. Use the webhook **Active** switch to pause or resume webhooks. ## What triggers a webhook JobBeacon sends a `job.matched` webhook when all of these are true: * You are on Pro. * You have saved an active webhook endpoint. * JobBeacon finds a new job after the company's first scan. * The job matches that company's keyword and location filters. The first scan seeds existing jobs. Seed jobs do not send webhook delivery. If a job does not match your filters when JobBeacon first sees it, changing filters later does not send a backfill webhook for that old job. ## Set up a webhook Click your avatar, then click **Settings**. In **Outbound Webhook**, enter your **Endpoint URL**. Keep the current **Payload version** unless an existing integration needs an older payload shape. If your endpoint requires API key authentication, enter a **Provider auth header** name such as `x-jobbeacon-apikey`. Click **Save**. The endpoint must use HTTPS. Copy the **Signing secret** when it appears. JobBeacon only shows the full secret once. Click **Send test** to queue a `webhook.test` delivery. Your account can have one webhook endpoint. ## Endpoint requirements Your endpoint must: * Use `https://` * Be reachable from the public internet * Return a `2xx` response when delivery succeeds * Not use credentials in the URL JobBeacon blocks localhost, private network addresses, and test-only hostnames. Use the **Provider auth header** field if your endpoint requires an API key in a custom header. ## Request headers Each delivery includes these headers: | Header | Value | | --------------------------- | -------------------------------------------------- | | `Content-Type` | `application/json` | | `User-Agent` | `JobBeacon-Webhooks/1.0` | | `JobBeacon-Event-Id` | The event ID, such as `evt_...` | | `JobBeacon-Timestamp` | Unix timestamp in seconds | | `JobBeacon-Signature` | HMAC signature, such as `v1=...` | | `JobBeacon-Webhook-Version` | The selected payload version, such as `2026-06-15` | | `Idempotency-Key` | Stable dedupe key for the event | Use `JobBeacon-Event-Id` or `Idempotency-Key` to ignore duplicate deliveries. If you set a **Provider auth header**, JobBeacon sends the signing secret as the value of that header. For example, a provider auth header named `x-jobbeacon-apikey` sends: ```text theme={null} x-jobbeacon-apikey: whsec_... ``` JobBeacon only sends the provider auth header to the original endpoint origin. If your endpoint redirects to a different origin, the redirected request does not include that header. ## Verify the signature JobBeacon signs the raw JSON body with your signing secret. The signed input is: ```text theme={null} {timestamp}.{rawBody} ``` The signature is an HMAC SHA-256 hex digest with a `v1=` prefix. Example in Node.js: ```js theme={null} import crypto from "node:crypto"; export function verifyJobBeaconWebhook({ rawBody, timestamp, signature, secret, }) { const expected = "v1=" + crypto .createHmac("sha256", secret) .update(`${timestamp}.${rawBody}`) .digest("hex"); const signatureBuffer = Buffer.from(signature); const expectedBuffer = Buffer.from(expected); return ( signatureBuffer.length === expectedBuffer.length && crypto.timingSafeEqual(signatureBuffer, expectedBuffer) ); } ``` Reject requests with an old `JobBeacon-Timestamp`. A 5-minute window is a common choice. ## Payload versions Your webhook endpoint is pinned to one payload version. New deliveries and test deliveries use that version until you change **Payload version** in Settings. | Version | Status | Notes | | ------------ | ------- | ------------------------------------------------------------------ | | `2026-06-15` | Current | Default for new webhook endpoints. | | `2026-06-12` | Legacy | Available for existing integrations that already use this version. | Both supported versions currently use the same fields. The selected version appears in the `api_version` payload field and the `JobBeacon-Webhook-Version` request header. ## `job.matched` payload ```json theme={null} { "event": "job.matched", "event_id": "evt_abc123", "api_version": "2026-06-15", "created_at": "2026-06-13T09:15:00.000Z", "dedupe_key": "job.matched:user_123:job_123", "job": { "id": "job_123", "external_id": "456789", "title": "Senior Backend Engineer", "location": "Remote", "url": "https://company.example/careers/job/456789", "first_seen_at": "2026-06-13T09:14:30.000Z", "last_seen_at": "2026-06-13T09:14:30.000Z", "is_active": true }, "company": { "id": "company_123", "name": "Acme", "slug": "acme" }, "share": { "token": "share_token", "url": "https://jobbeacon.app/share/share_token", "image_url": "https://jobbeacon.app/share/share_token/opengraph-image", "twitter_image_url": "https://jobbeacon.app/share/share_token/twitter-image", "sharer_name": "alex" } } ``` ## `job.matched` fields | Field | Type | Description | | ------------- | ------ | ---------------------------------------------------------------------------------------- | | `event` | string | Always `job.matched`. | | `event_id` | string | Unique ID for this webhook delivery. It also appears in the `JobBeacon-Event-Id` header. | | `api_version` | string | The selected payload version. It matches the `JobBeacon-Webhook-Version` header. | | `created_at` | string | Time JobBeacon created the payload, in ISO 8601 format. | | `dedupe_key` | string | Stable key for this matched job event. It also appears in the `Idempotency-Key` header. | | `job` | object | The matched job. | | `company` | object | The company that posted the job. | | `share` | object | Public JobBeacon share links and images for the job. | ### `job` object | Field | Type | Description | | --------------- | -------------- | ----------------------------------------------------------- | | `id` | string | JobBeacon's ID for the job. | | `external_id` | string | The job ID from the company's careers system. | | `title` | string | Job title. | | `location` | string or null | Job location, if JobBeacon received one. | | `url` | string | Public URL for the job posting. | | `first_seen_at` | string or null | Time JobBeacon first saw the job, in ISO 8601 format. | | `last_seen_at` | string or null | Time JobBeacon last saw the job active, in ISO 8601 format. | | `is_active` | boolean | Whether JobBeacon currently sees the job as active. | ### `company` object | Field | Type | Description | | ------ | ------ | ------------------------------------------------- | | `id` | string | JobBeacon's ID for the company on your watchlist. | | `name` | string | Company name. | | `slug` | string | JobBeacon's company slug. | ### `share` object | Field | Type | Description | | ------------------- | ------ | ----------------------------------------------- | | `token` | string | Token for the public JobBeacon share page. | | `url` | string | Public JobBeacon preview page for the job. | | `image_url` | string | Stable Open Graph image URL for the share page. | | `twitter_image_url` | string | Stable Twitter image URL for the share page. | | `sharer_name` | string | Display name shown on the share page. | The image URLs are useful for tools that let you attach or preview images. ## Test payload Click **Send test** to queue a `webhook.test` event. The test payload uses the same selected payload version as matched job deliveries. ```json theme={null} { "event": "webhook.test", "event_id": "evt_abc123", "api_version": "2026-06-15", "created_at": "2026-06-13T09:15:00.000Z", "dedupe_key": "webhook.test:user_123:delivery_123", "test": true, "job": { "id": "job_test", "external_id": "jobbeacon-test", "title": "JobBeacon is hiring a Product Engineer", "location": "Remote", "url": "https://jobbeacon.app/careers/jobbeacon-test", "first_seen_at": "2026-06-13T09:15:00.000Z", "last_seen_at": "2026-06-13T09:15:00.000Z", "is_active": true }, "company": { "id": "company_test", "name": "JobBeacon", "slug": "jobbeacon" }, "share": { "token": "jobbeacon-test", "url": "https://jobbeacon.app/share/jobbeacon-test", "image_url": "https://jobbeacon.app/share/jobbeacon-test/opengraph-image", "twitter_image_url": "https://jobbeacon.app/share/jobbeacon-test/twitter-image", "sharer_name": "JobBeacon" } } ``` ## `webhook.test` fields The `webhook.test` payload includes the same fields as `job.matched`, plus: | Field | Type | Description | | ------- | ------- | ---------------------------------- | | `event` | string | Always `webhook.test`. | | `test` | boolean | Always `true` for test deliveries. | The `job`, `company`, and `share` objects contain test data. Use them to verify your endpoint, signature check, and field mapping before relying on live matched job deliveries. You can send one test per minute, up to 25 tests in 24 hours. ## Delivery behavior JobBeacon waits up to 10 seconds for your endpoint. A delivery is marked **delivered** when your endpoint returns any `2xx` status. JobBeacon retries temporary failures, including network errors, `408`, `409`, `425`, `429`, and `5xx` responses. Retries use backoff and stop after 5 attempts. Other failures are marked **failed**. JobBeacon follows up to 3 redirects, as long as the final URL still passes endpoint validation. ## Delivery history The **Recent deliveries** table in Settings shows the latest webhook deliveries. Delivery history is kept for 30 days. Common statuses: | Status | Meaning | | ----------- | --------------------------------------------------------------------- | | `queued` | Waiting to be sent | | `sending` | Delivery is in progress | | `delivered` | Your endpoint returned `2xx` | | `failed` | Delivery will not be retried | | `skipped` | Delivery was skipped, usually because Pro or the webhook was disabled | ## Rotate or pause webhooks Click **Rotate secret** if your signing secret may have been exposed. After rotating, update your endpoint to use the new secret. Use the **Active** switch to pause delivery without deleting your endpoint. If your account moves from Pro to Free, webhook delivery pauses. Your endpoint and signing secret stay saved in case you reactivate Pro later. ## Troubleshooting If a webhook does not arrive: 1. Check that your account is on Pro. 2. Check that the webhook is **Active**. 3. Check that the endpoint uses HTTPS and is publicly reachable. 4. Click **Send test**. 5. Review **Recent deliveries** for response status and error details. 6. Confirm the job was new and matched your filters when JobBeacon first saw it.