[{"data":1,"prerenderedAt":509},["ShallowReactive",2],{"navigation":3,"blog-navigation":109,"\u002Fblog\u002Fmore-jobs-on-every-plan":156,"\u002Fblog\u002Fmore-jobs-on-every-plan-surround":505},[4,23,47,68,98],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Authentication","\u002Fdocs\u002Fgetting-started\u002Fauthentication","1.docs\u002F1.getting-started\u002F2.authentication","i-lucide-key",{"title":18,"path":19,"stem":20,"icon":21},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","1.docs\u002F1.getting-started\u002F3.quick-start","i-lucide-rocket",false,{"title":24,"icon":22,"path":25,"stem":26,"children":27,"page":22},"API Reference","\u002Fdocs\u002Freference","1.docs\u002F2.reference",[28,32,37,42],{"title":24,"path":29,"stem":30,"icon":31},"\u002Fdocs\u002Freference\u002Foverview","1.docs\u002F2.reference\u002F1.overview","i-lucide-book-open",{"title":33,"path":34,"stem":35,"icon":36},"Jobs","\u002Fdocs\u002Freference\u002Fjobs","1.docs\u002F2.reference\u002F2.jobs","i-lucide-briefcase",{"title":38,"path":39,"stem":40,"icon":41},"Companies","\u002Fdocs\u002Freference\u002Fcompanies","1.docs\u002F2.reference\u002F3.companies","i-lucide-building-2",{"title":43,"path":44,"stem":45,"icon":46},"Data Types","\u002Fdocs\u002Freference\u002Fdata-types","1.docs\u002F2.reference\u002F4.data-types","i-lucide-list",{"title":48,"path":49,"stem":50,"children":51,"icon":22},"Code Examples","\u002Fdocs\u002Fcode-examples","1.docs\u002F3.code-examples\u002F1.index",[52,54,59,63],{"title":48,"path":49,"stem":50,"icon":53},"i-lucide-code",{"title":55,"path":56,"stem":57,"icon":58},"JavaScript","\u002Fdocs\u002Fcode-examples\u002Fjavascript","1.docs\u002F3.code-examples\u002F2.javascript","i-lucide-braces",{"title":60,"path":61,"stem":62,"icon":53},"Python","\u002Fdocs\u002Fcode-examples\u002Fpython","1.docs\u002F3.code-examples\u002F3.python",{"title":64,"path":65,"stem":66,"icon":67},"cURL","\u002Fdocs\u002Fcode-examples\u002Fcurl","1.docs\u002F3.code-examples\u002F4.curl","i-lucide-terminal",{"title":69,"icon":22,"path":70,"stem":71,"children":72,"page":22},"Guides","\u002Fdocs\u002Fguides","1.docs\u002F4.guides",[73,78,83,88,93],{"title":74,"path":75,"stem":76,"icon":77},"Filter Jobs","\u002Fdocs\u002Fguides\u002Fhow-to-filter-jobs-by-skills-location-and-salary","1.docs\u002F4.guides\u002F1.how-to-filter-jobs-by-skills-location-and-salary","i-lucide-filter",{"title":79,"path":80,"stem":81,"icon":82},"Fetch All Jobs","\u002Fdocs\u002Fguides\u002Fcursor-pagination-for-large-job-datasets","1.docs\u002F4.guides\u002F2.cursor-pagination-for-large-job-datasets","i-lucide-chevrons-right",{"title":84,"path":85,"stem":86,"icon":87},"Incremental Sync","\u002Fdocs\u002Fguides\u002Fautomate-daily-job-sync-with-incremental-updates","1.docs\u002F4.guides\u002F3.automate-daily-job-sync-with-incremental-updates","i-lucide-refresh-cw",{"title":89,"path":90,"stem":91,"icon":92},"Rate Limits","\u002Fdocs\u002Fguides\u002Fhow-to-handle-api-rate-limits","1.docs\u002F4.guides\u002F4.how-to-handle-api-rate-limits","i-lucide-gauge",{"title":94,"path":95,"stem":96,"icon":97},"Build a Job Board","\u002Fdocs\u002Fguides\u002Fhow-to-build-a-job-board","1.docs\u002F4.guides\u002F5.how-to-build-a-job-board","i-lucide-layout-grid",{"title":99,"path":100,"stem":101,"children":102,"icon":104},"Webhooks","\u002Fdocs\u002Fwebhooks","1.docs\u002F5.webhooks\u002F1.index",[103,105],{"title":99,"path":100,"stem":101,"icon":104},"i-lucide-webhook",{"title":106,"path":107,"stem":108,"icon":46},"Event reference","\u002Fdocs\u002Fwebhooks\u002Fevent-reference","1.docs\u002F5.webhooks\u002F2.event-reference",[110],{"title":111,"path":112,"stem":113,"children":114,"page":22},"Blog","\u002Fblog","3.blog",[115,122,129,135,142,149],{"title":116,"path":117,"stem":118,"children":119,"icon":121},"More Jobs on Every Plan","\u002Fblog\u002Fmore-jobs-on-every-plan","3.blog\u002F6.more-jobs-on-every-plan\u002F1.index",[120],{"title":116,"path":117,"stem":118,"icon":121},"i-lucide-scale",{"title":123,"path":124,"stem":125,"children":126,"icon":128},"Job Closures","\u002Fblog\u002Fclosed-job-postings","3.blog\u002F5.closed-job-postings\u002F1.index",[127],{"title":123,"path":124,"stem":125,"icon":128},"i-lucide-archive",{"title":130,"path":131,"stem":132,"children":133,"icon":104},"Webhooks Launch","\u002Fblog\u002Fwebhooks","3.blog\u002F3.webhooks\u002F1.index",[134],{"title":130,"path":131,"stem":132,"icon":104},{"title":136,"path":137,"stem":138,"children":139,"icon":141},"Why Job Descriptions Now Come as Plain Text and Markdown","\u002Fblog\u002Fdescription-formats","3.blog\u002F4.description-formats\u002F1.index",[140],{"title":136,"path":137,"stem":138,"icon":141},"i-lucide-file-text",{"title":143,"path":144,"stem":145,"children":146,"icon":148},"How to Build Automated Job Alerts with n8n - Jobven API Tutorial","\u002Fblog\u002Fn8n-job-alerts","3.blog\u002F2.n8n-job-alerts\u002F1.index",[147],{"title":143,"path":144,"stem":145,"icon":148},"i-lucide-workflow",{"title":150,"path":151,"stem":152,"children":153,"icon":155},"What is a Job Posting API?","\u002Fblog\u002Fjob-posting-api","3.blog\u002F1.job-posting-api\u002F1.index",[154],{"title":150,"path":151,"stem":152,"icon":155},"i-lucide-help-circle",{"id":157,"title":158,"authors":159,"badge":163,"body":165,"date":479,"description":480,"extension":481,"head":482,"image":496,"meta":497,"navigation":501,"path":117,"schemaOrg":496,"seo":502,"sitemap":503,"stem":118,"__hash__":504},"posts\u002F3.blog\u002F6.more-jobs-on-every-plan\u002F1.index.md","More Jobs on Every Plan, and Closures Are Free",[160],{"name":161,"description":162},"Peter","Founder, Jobven",{"label":164},"Announcement",{"type":166,"value":167,"toc":471},"minimark",[168,172,176,181,184,196,205,209,212,215,219,234,238,241,244,248,253,406,412,433,441,445,464,467],[169,170,158],"h1",{"id":171},"more-jobs-on-every-plan-and-closures-are-free",[173,174,175],"p",{},"Every Jobven plan is now a number of jobs a month, and every tier holds as many jobs as before or more at the same price. Your allowance is spent only on job records that actually reach you: an empty check for new listings, a company lookup, a failed request, and every closure or removal cost nothing.",[177,178,180],"h2",{"id":179},"what-counts-as-a-job","What counts as a job",[173,182,183],{},"Every job in a search response counts one. A single job lookup counts one. A new or updated job delivered to a webhook endpoint counts one.",[173,185,186,187,191,192,195],{},"Everything else is free: a search that returns nothing, a company lookup, a request that fails, a test event, and every ",[188,189,190],"code",{},"job.closed"," and ",[188,193,194],{},"job.deleted"," delivery. Page size no longer changes what you pay, so ask for the largest page your plan allows and make fewer requests.",[173,197,198,199,204],{},"The ",[200,201,203],"a",{"href":202},"\u002Fdocs\u002Fgetting-started\u002Fauthentication#limits-by-tier","authentication page"," has the per-plan table.",[177,206,208],{"id":207},"push-and-pull-cost-the-same","Push and pull cost the same",[173,210,211],{},"A job counts once however it reaches you. Fetch a page of 100 and it counts 100; have those same 100 pushed to you as they are posted and it counts 100. So the choice between polling and webhooks is about latency and how much code you want to run, and no longer about what you pay.",[173,213,214],{},"What webhooks add on top, which roles closed and which were removed, is the free part. That is the information that keeps a job board honest, and it costs nothing to receive.",[177,216,218],{"id":217},"what-happens-at-your-limit","What happens at your limit",[173,220,221,222,225,226,229,230,233],{},"API requests return ",[188,223,224],{},"429"," until your period resets, as before. Webhooks change: new and updated jobs are dropped, but closures and deletions keep arriving, so the jobs you already hold do not go stale while you are over. Dropped events are not re-sent, and the ",[200,227,228],{"href":90},"rate limits guide"," explains how to read the headers so you see it coming. ",[188,231,232],{},"X-RateLimit-Remaining"," is in jobs and already accounts for the response it arrives with.",[177,235,237],{"id":236},"plan-volumes","Plan volumes",[173,239,240],{},"Starter stays at 10,000 jobs a month and Free at 300. Growth is now 50,000, Professional 150,000, and Custom starts at 1,000,000. No price changed. The 7-day trial is 2,500 jobs.",[173,242,243],{},"The usage shown on your billing page carried over as jobs.",[177,245,247],{"id":246},"one-payload-changed","One payload changed",[173,249,250,252],{},[188,251,190],{}," now carries only what you need to act on it:",[254,255,260],"pre",{"className":256,"code":257,"language":258,"meta":259,"style":259},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"type\": \"job.closed\",\n  \"data\": {\n    \"job\": {\n      \"id\": \"01HZX7K4VWJ8MMGS31F7DCYJ8Z\",\n      \"applyUrl\": \"https:\u002F\u002Fexample.com\u002Fjobs\u002F123\",\n      \"closedAt\": 1758448800\n    }\n  }\n}\n","json","",[188,261,262,271,298,313,329,352,373,388,394,400],{"__ignoreMap":259},[263,264,267],"span",{"class":265,"line":266},"line",1,[263,268,270],{"class":269},"sMK4o","{\n",[263,272,274,277,281,284,287,290,293,295],{"class":265,"line":273},2,[263,275,276],{"class":269},"  \"",[263,278,280],{"class":279},"spNyl","type",[263,282,283],{"class":269},"\"",[263,285,286],{"class":269},":",[263,288,289],{"class":269}," \"",[263,291,190],{"class":292},"sfazB",[263,294,283],{"class":269},[263,296,297],{"class":269},",\n",[263,299,301,303,306,308,310],{"class":265,"line":300},3,[263,302,276],{"class":269},[263,304,305],{"class":279},"data",[263,307,283],{"class":269},[263,309,286],{"class":269},[263,311,312],{"class":269}," {\n",[263,314,316,319,323,325,327],{"class":265,"line":315},4,[263,317,318],{"class":269},"    \"",[263,320,322],{"class":321},"sBMFI","job",[263,324,283],{"class":269},[263,326,286],{"class":269},[263,328,312],{"class":269},[263,330,332,335,339,341,343,345,348,350],{"class":265,"line":331},5,[263,333,334],{"class":269},"      \"",[263,336,338],{"class":337},"sbssI","id",[263,340,283],{"class":269},[263,342,286],{"class":269},[263,344,289],{"class":269},[263,346,347],{"class":292},"01HZX7K4VWJ8MMGS31F7DCYJ8Z",[263,349,283],{"class":269},[263,351,297],{"class":269},[263,353,355,357,360,362,364,366,369,371],{"class":265,"line":354},6,[263,356,334],{"class":269},[263,358,359],{"class":337},"applyUrl",[263,361,283],{"class":269},[263,363,286],{"class":269},[263,365,289],{"class":269},[263,367,368],{"class":292},"https:\u002F\u002Fexample.com\u002Fjobs\u002F123",[263,370,283],{"class":269},[263,372,297],{"class":269},[263,374,376,378,381,383,385],{"class":265,"line":375},7,[263,377,334],{"class":269},[263,379,380],{"class":337},"closedAt",[263,382,283],{"class":269},[263,384,286],{"class":269},[263,386,387],{"class":337}," 1758448800\n",[263,389,391],{"class":265,"line":390},8,[263,392,393],{"class":269},"    }\n",[263,395,397],{"class":265,"line":396},9,[263,398,399],{"class":269},"  }\n",[263,401,403],{"class":265,"line":402},10,[263,404,405],{"class":269},"}\n",[173,407,408,409,411],{},"That is the same shape as ",[188,410,194],{},", and it is what makes closures free to deliver. You already hold the record, so a closure only has to tell you which one. If your handler read other fields off a closure, key on the id and fetch the job when you need the rest:",[254,413,417],{"className":414,"code":415,"language":416,"meta":259,"style":259},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","if (event === 'job.closed') {\n  await db.jobs.update({ where: { id: data.job.id }, data: { status: 'closed' } })\n}\n","js",[188,418,419,424,429],{"__ignoreMap":259},[263,420,421],{"class":265,"line":266},[263,422,423],{},"if (event === 'job.closed') {\n",[263,425,426],{"class":265,"line":273},[263,427,428],{},"  await db.jobs.update({ where: { id: data.job.id }, data: { status: 'closed' } })\n",[263,430,431],{"class":265,"line":300},[263,432,405],{},[173,434,435,436,440],{},"A closure for a job you do not have can be ignored. The ",[200,437,439],{"href":438},"\u002Fdocs\u002Fwebhooks\u002Fevent-reference#job-closed","event reference"," has every field.",[177,442,444],{"id":443},"where-to-start","Where to start",[173,446,447,448,451,452,454,455,458,459,463],{},"If you poll, nothing changes except that a page costs what it contains, so use ",[188,449,450],{},"postedAfter"," freely: an empty poll is free. If you receive webhooks, check your ",[188,453,190],{}," handler against the new shape and add ",[188,456,457],{},"job.updated"," to your subscription if you want refreshed records pushed rather than re-fetched. The ",[200,460,462],{"href":461},"\u002Fchangelog","changelog entry"," lists the exact renames.",[173,465,466],{},"Jobs are what you came for, and they are now the only thing you pay for.",[468,469,470],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":259,"searchDepth":273,"depth":273,"links":472},[473,474,475,476,477,478],{"id":179,"depth":273,"text":180},{"id":207,"depth":273,"text":208},{"id":217,"depth":273,"text":218},{"id":236,"depth":273,"text":237},{"id":246,"depth":273,"text":247},{"id":443,"depth":273,"text":444},"2026-09-20 18:00:00","Jobven plans now count the jobs delivered to you, by API or by webhook. Closures, deletions and empty pages are free, and every plan holds as many jobs or more.","md",{"meta":483},[484,487,490,493],{"name":485,"content":486},"keywords","job data api pricing, jobs per month api plan, job posting api quota, webhook pricing job api, api metering jobs delivered, job feed api cost",{"name":488,"content":489},"og:title","More Jobs on Every Plan, and Closures Are Free | Jobven",{"name":491,"content":492},"og:description","Every Jobven plan is now a number of jobs a month, with more room at every tier, unchanged prices, and closures, removals and empty checks free.",{"name":494,"content":495},"twitter:card","summary_large_image",null,{"ogImage":498},{"component":499,"props":500},"OgImageBlog",{"title":158},{"title":116,"icon":121},{"title":489,"description":480},{"loc":117},"xWYZrwrd-P3TQAGGUPTtwEo22Tbq4WrqfnkdNJum0Ls",[506,496],{"title":123,"path":124,"stem":125,"description":507,"date":508,"icon":128,"children":-1},"Jobven closes a job posting when the employer's board stops listing it, sends job.closed, and drops it from the feed. Handle reopened roles without duplicates.","2026-08-25 10:00:00",1790268365779]