[{"data":1,"prerenderedAt":599},["ShallowReactive",2],{"navigation":3,"content-tags:articles":150,"tag-saas":437},[4],{"title":5,"path":6,"stem":7,"children":8,"page":149},"Articles","\u002Farticles","articles",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145],{"title":10,"path":11,"stem":12},"Building a Claude Code Plugin with Hooks","\u002Farticles\u002F2026-01-04-building-claude-code-plugin-with-hooks","articles\u002F2026-01-04-building-claude-code-plugin-with-hooks",{"title":14,"path":15,"stem":16},"Where should I validate? Everywhere, and for different reasons","\u002Farticles\u002F2026-04-18-validation-across-the-stack","articles\u002F2026-04-18-validation-across-the-stack",{"title":18,"path":19,"stem":20},"Error handling across the stack","\u002Farticles\u002F2026-04-23-error-handling-across-the-stack","articles\u002F2026-04-23-error-handling-across-the-stack",{"title":22,"path":23,"stem":24},"3 Ways to Run NestJS Cron Jobs When Running Multiple Instances","\u002Farticles\u002F3-ways-to-run-nestjs-cron-jobs-when-running-multiple-instances","articles\u002F3-ways-to-run-nestjs-cron-jobs-when-running-multiple-instances",{"title":26,"path":27,"stem":28},"Building a Custom Content Slider (Carousel) in Angular","\u002Farticles\u002Fbuilding-a-custom-content-slider-carousel-in-angular","articles\u002Fbuilding-a-custom-content-slider-carousel-in-angular",{"title":30,"path":31,"stem":32},"Building Jobven: Designing a Developer-Friendly API","\u002Farticles\u002Fbuilding-jobven-designing-a-developer-friendly-api","articles\u002Fbuilding-jobven-designing-a-developer-friendly-api",{"title":34,"path":35,"stem":36},"Building MapleStack: AWS S3 for Data Storage","\u002Farticles\u002Fbuilding-maplestack-aws-s3-for-data-storage","articles\u002Fbuilding-maplestack-aws-s3-for-data-storage",{"title":38,"path":39,"stem":40},"Building MapleStack: Enhancing Email Capabilities with Mailgun","\u002Farticles\u002Fbuilding-maplestack-enhancing-email-capabilities-with-mailgun","articles\u002Fbuilding-maplestack-enhancing-email-capabilities-with-mailgun",{"title":42,"path":43,"stem":44},"Building MapleStack: NestJS for Server-Side Operations","\u002Farticles\u002Fbuilding-maplestack-nestjs-for-server-side-operations","articles\u002Fbuilding-maplestack-nestjs-for-server-side-operations",{"title":46,"path":47,"stem":48},"Building MapleStack: PostgreSQL for Data Storage","\u002Farticles\u002Fbuilding-maplestack-postgresql-for-data-storage","articles\u002Fbuilding-maplestack-postgresql-for-data-storage",{"title":50,"path":51,"stem":52},"Building MapleStack: React for an interactive user interface","\u002Farticles\u002Fbuilding-maplestack-react-for-an-interactive-user-interface","articles\u002Fbuilding-maplestack-react-for-an-interactive-user-interface",{"title":54,"path":55,"stem":56},"Building MapleStack: Securing Connections with Let's Encrypt","\u002Farticles\u002Fbuilding-maplestack-securing-connections-with-lets-encrypt","articles\u002Fbuilding-maplestack-securing-connections-with-lets-encrypt",{"title":58,"path":59,"stem":60},"Building MapleStack: Simplifying User Authorization with AWS Cognito","\u002Farticles\u002Fbuilding-maplestack-simplifying-user-authorization-with-aws-cognito","articles\u002Fbuilding-maplestack-simplifying-user-authorization-with-aws-cognito",{"title":62,"path":63,"stem":64},"Building MapleStack: Tailwind CSS for Streamlined Styling","\u002Farticles\u002Fbuilding-maplestack-tailwind-css-for-streamlined-styling","articles\u002Fbuilding-maplestack-tailwind-css-for-streamlined-styling",{"title":66,"path":67,"stem":68},"Nigeria's Postcode API: How It Works and How to Test It","\u002Farticles\u002Fbuilding-on-nigerias-postcode-api","articles\u002Fbuilding-on-nigerias-postcode-api",{"title":70,"path":71,"stem":72},"Debugging Multiple NestJS Applications in VSCode","\u002Farticles\u002Fdebugging-multiple-nestjs-applications-in-vscode","articles\u002Fdebugging-multiple-nestjs-applications-in-vscode",{"title":74,"path":75,"stem":76},"Enums as arrays in PostgreSQL - Updated 2024","\u002Farticles\u002Fenums-as-arrays-in-postgresql","articles\u002Fenums-as-arrays-in-postgresql",{"title":78,"path":79,"stem":80},"FindChildcare.ca","\u002Farticles\u002Ffindchildcare-ca","articles\u002Ffindchildcare-ca",{"title":82,"path":83,"stem":84},"GraphQL Server - Apollo, KoaJS and Typescript implementation","\u002Farticles\u002Fgraphql-server-apollo-koajs-and-typescript-implementation","articles\u002Fgraphql-server-apollo-koajs-and-typescript-implementation",{"title":86,"path":87,"stem":88},"How I built MapleStack's waitlist with AI: ChatGPT vs Bard","\u002Farticles\u002Fhow-i-built-maplestacks-waitlist-with-ai-chatgpt-vs-bard","articles\u002Fhow-i-built-maplestacks-waitlist-with-ai-chatgpt-vs-bard",{"title":90,"path":91,"stem":92},"How to Integrate Google reCAPTCHA v3 with NestJS in 3 Easy Steps","\u002Farticles\u002Fhow-to-integrate-google-recaptcha-v3-with-nestjs-in-3-easy-steps","articles\u002Fhow-to-integrate-google-recaptcha-v3-with-nestjs-in-3-easy-steps",{"title":94,"path":95,"stem":96},"How to resolve a blacklisted domain","\u002Farticles\u002Fhow-to-resolve-a-blacklisted-domain","articles\u002Fhow-to-resolve-a-blacklisted-domain",{"title":98,"path":99,"stem":100},"Implementing WordPress-like Tags in Nuxt Content","\u002Farticles\u002Fimplementing-wordpress-like-tags-in-nuxt","articles\u002Fimplementing-wordpress-like-tags-in-nuxt",{"title":102,"path":103,"stem":104},"Jobven","\u002Farticles\u002Fjobven","articles\u002Fjobven",{"title":106,"path":107,"stem":108},"KidzLog","\u002Farticles\u002Fkidzlog","articles\u002Fkidzlog",{"title":110,"path":111,"stem":112},"MapleStack","\u002Farticles\u002Fmaplestack","articles\u002Fmaplestack",{"title":114,"path":115,"stem":116},"Migrating from WordPress to Nuxt","\u002Farticles\u002Fmigrating-from-wordpress-to-nuxt","articles\u002Fmigrating-from-wordpress-to-nuxt",{"title":118,"path":119,"stem":120},"My Initial Server Setup Checklist","\u002Farticles\u002Fmy-initial-server-setup-checklist","articles\u002Fmy-initial-server-setup-checklist",{"title":122,"path":123,"stem":124},"Pre-authorized transaction on the Stellar network","\u002Farticles\u002Fpre-authorized-transaction-on-the-stellar-network","articles\u002Fpre-authorized-transaction-on-the-stellar-network",{"title":126,"path":127,"stem":128},"Saza: Open Source mobile and desktop Stellar wallet release.","\u002Farticles\u002Fsaza-open-source-mobile-and-desktop-stellar-wallet-release","articles\u002Fsaza-open-source-mobile-and-desktop-stellar-wallet-release",{"title":130,"path":131,"stem":132},"SpellCheckMySite.com","\u002Farticles\u002Fspellcheckmysite-com","articles\u002Fspellcheckmysite-com",{"title":134,"path":135,"stem":136},"Using Check Constraints in PostgreSQL for Value Validation","\u002Farticles\u002Fusing-check-constraints-in-postgresql-for-value-validation","articles\u002Fusing-check-constraints-in-postgresql-for-value-validation",{"title":138,"path":139,"stem":140},"Using DataLoader in GraphQL","\u002Farticles\u002Fusing-dataloader-in-graphql","articles\u002Fusing-dataloader-in-graphql",{"title":142,"path":143,"stem":144},"Using Typescript in NodeJS development","\u002Farticles\u002Fusing-typescript-in-nodejs-development","articles\u002Fusing-typescript-in-nodejs-development",{"title":146,"path":147,"stem":148},"Welcome!","\u002Farticles\u002Fwelcome","articles\u002Fwelcome",false,[151,162,172,182,190,199,207,215,224,232,240,248,256,264,273,283,291,299,307,315,323,332,340,348,356,364,372,381,389,397,405,413,421,429],{"id":152,"color":153,"description":154,"extension":155,"meta":156,"name":157,"slug":158,"stem":159,"__hash__":160,"count":161},"tags\u002Ftags\u002Fai.yml","purple","Artificial Intelligence and machine learning topics","yml",{},"AI","ai","tags\u002Fai","3Kbwn1GafRMDqK3ErYiBohkqyMbs4y-gmPA5L0htrtI",2,{"id":163,"color":164,"description":165,"extension":155,"meta":166,"name":167,"slug":168,"stem":169,"__hash__":170,"count":171},"tags\u002Ftags\u002Fangular.yml","red","Angular framework tutorials and component development",{},"Angular","angular","tags\u002Fangular","4JdHB81zNrypA0P8D8gi97pj0Ds9E3_IW7YbLvnzs1k",1,{"id":173,"color":174,"description":175,"extension":155,"meta":176,"name":177,"slug":178,"stem":179,"__hash__":180,"count":181},"tags\u002Ftags\u002Fapi.yml","blue","Designing, building and consuming web APIs",{},"API","api","tags\u002Fapi","A0x8MlouPoSEbat0Yj1-_xytY1yBgyVkGIlY-bTzPUM",3,{"id":183,"color":184,"description":185,"extension":155,"meta":186,"name":5,"slug":7,"stem":187,"__hash__":188,"count":189},"tags\u002Ftags\u002Farticles.yml","gray","General articles and blog posts",{},"tags\u002Farticles","iT5XsTSsj5v9-aLrtgHxDyk_QCYfK8mlea2vVyCdcZM",8,{"id":191,"color":192,"description":193,"extension":155,"meta":194,"name":195,"slug":196,"stem":197,"__hash__":198,"count":181},"tags\u002Ftags\u002Faws.yml","orange","Amazon Web Services cloud platform tutorials and integrations",{},"AWS","aws","tags\u002Faws","i2eOUxfMNR5PbOtUVc7VAbZk5Y7LupicySpVtJY24_A",{"id":200,"color":174,"description":201,"extension":155,"meta":202,"name":203,"slug":204,"stem":205,"__hash__":206,"count":171},"tags\u002Ftags\u002Fbard.yml","Google Bard AI assistant",{},"Bard","bard","tags\u002Fbard","uy9j-VgMeapYwgVu98-Df6yqWCXCAwfLn5j8Sb15ZmE",{"id":208,"color":164,"description":209,"extension":155,"meta":210,"name":211,"slug":212,"stem":213,"__hash__":214,"count":189},"tags\u002Ftags\u002Fbuilding-maplestack.yml","Series on building the MapleStack platform",{},"Building MapleStack","building-maplestack","tags\u002Fbuilding-maplestack","hIpKigdKwKbxd8aqva_KMKT-hpxpLDOCnQ9qoRGyjPg",{"id":216,"color":217,"description":218,"extension":155,"meta":219,"name":220,"slug":221,"stem":222,"__hash__":223,"count":171},"tags\u002Ftags\u002Fchatgpt.yml","green","OpenAI ChatGPT integration and usage",{},"ChatGPT","chatgpt","tags\u002Fchatgpt","32dptlACBGlEhrLxxih3XBVQeeqayyl3nUn4xrjh6mM",{"id":225,"color":153,"description":226,"extension":155,"meta":227,"name":228,"slug":229,"stem":230,"__hash__":231,"count":171},"tags\u002Ftags\u002Fclaude-code.yml","Building with and extending Anthropic's Claude Code",{},"Claude Code","claude-code","tags\u002Fclaude-code","DILmAuTs9y1dm4L44wLW-52LfKAjbFlccJOJOpIBnD0",{"id":233,"color":192,"description":234,"extension":155,"meta":235,"name":236,"slug":237,"stem":238,"__hash__":239,"count":171},"tags\u002Ftags\u002Fdataloader.yml","DataLoader utility for batching and caching",{},"DataLoader","dataloader","tags\u002Fdataloader","LmXdDjUElkWFv52Zjjjs9iSl5ho6XzjgngiwhkAnlLk",{"id":241,"color":174,"description":242,"extension":155,"meta":243,"name":244,"slug":245,"stem":246,"__hash__":247,"count":171},"tags\u002Ftags\u002Fdns.yml","Domain Name System configuration and troubleshooting",{},"DNS","dns","tags\u002Fdns","-ouuVgZR4CIiCKyOp51RQoXCKDvhpBV0KMUf1zqLXNc",{"id":249,"color":174,"description":250,"extension":155,"meta":251,"name":252,"slug":253,"stem":254,"__hash__":255,"count":161},"tags\u002Ftags\u002Fengineering.yml","Software engineering practice, craft and technical decision making",{},"Engineering","engineering","tags\u002Fengineering","t3NT39qm9R9NCBT8lwSuG9cxZZZa4Xds-X7AINZw-3o",{"id":257,"color":164,"description":258,"extension":155,"meta":259,"name":260,"slug":261,"stem":262,"__hash__":263,"count":171},"tags\u002Ftags\u002Ferror-handling.yml","Handling, surfacing and recovering from failure across a stack",{},"Error Handling","error-handling","tags\u002Ferror-handling","jxCFis914HceisiNgt920hxUAe4KgCulUZGLzKcNspg",{"id":265,"color":266,"description":267,"extension":155,"meta":268,"name":269,"slug":270,"stem":271,"__hash__":272,"count":161},"tags\u002Ftags\u002Fgraphql.yml","pink","GraphQL API development, schema design, and implementation guides",{},"GraphQL","graphql","tags\u002Fgraphql","1wfWwIg4deU-5JedMVdkw9j9mualhUlJ1MZDgb6V7R0",{"id":274,"color":275,"description":276,"extension":155,"meta":277,"name":278,"slug":279,"stem":280,"__hash__":281,"count":282},"tags\u002Ftags\u002Fjavascript.yml","yellow","JavaScript programming language tutorials and best practices",{},"JavaScript","javascript","tags\u002Fjavascript","qZheXj7oAA3rukxJWCK5SLSe3-_mCwMq0OAi9BtEFRw",6,{"id":284,"color":184,"description":285,"extension":155,"meta":286,"name":287,"slug":288,"stem":289,"__hash__":290,"count":161},"tags\u002Ftags\u002Fkoajs.yml","Koa.js web framework for Node.js",{},"KoaJS","koajs","tags\u002Fkoajs","KVPDsU-wIMo46n6-bdbF-dRkiwlRbz3RJP7K9vSOrmQ",{"id":292,"color":217,"description":293,"extension":155,"meta":294,"name":295,"slug":296,"stem":297,"__hash__":298,"count":171},"tags\u002Ftags\u002Fletsencrypt.yml","Free SSL\u002FTLS certificates with Let's Encrypt",{},"Let's Encrypt","letsencrypt","tags\u002Fletsencrypt","0s8AZbiIKoWGwiCNeWEc_OIo3aDAJlkSB5fjQlgcGNk",{"id":300,"color":184,"description":301,"extension":155,"meta":302,"name":303,"slug":304,"stem":305,"__hash__":306,"count":171},"tags\u002Ftags\u002Flinux.yml","Linux server administration and command-line tools",{},"Linux","linux","tags\u002Flinux","YmvWMX2B2AdXzWfUycxqXt4m9jSgpLE8q7eW6FeiJPk",{"id":308,"color":164,"description":309,"extension":155,"meta":310,"name":110,"slug":311,"stem":312,"__hash__":313,"count":314},"tags\u002Ftags\u002Fmaplestack.yml","Building MapleStack job board platform",{},"maplestack","tags\u002Fmaplestack","v2dZpc6OuxQeK2KTQIC3RYfv4FwNzIAa0VDTzLjWjAA",9,{"id":316,"color":192,"description":317,"extension":155,"meta":318,"name":319,"slug":320,"stem":321,"__hash__":322,"count":171},"tags\u002Ftags\u002Fmigration.yml","Platform and data migration guides",{},"Migration","migration","tags\u002Fmigration","scw_ZTGUersSET1o4l_NAkZ3cDKiplB53LqtFRvE7Yc",{"id":324,"color":164,"description":325,"extension":155,"meta":326,"name":327,"slug":328,"stem":329,"__hash__":330,"count":331},"tags\u002Ftags\u002Fnestjs.yml","Articles about NestJS framework for building efficient, scalable Node.js server-side applications",{},"NestJS","nestjs","tags\u002Fnestjs","GQFi18GrTd6pSmws7rOsyKTbLATtQwywfsZpQwhCsI0",4,{"id":333,"color":217,"description":334,"extension":155,"meta":335,"name":336,"slug":337,"stem":338,"__hash__":339,"count":181},"tags\u002Ftags\u002Fnodejs.yml","Node.js runtime environment and server-side JavaScript",{},"Node.js","nodejs","tags\u002Fnodejs","lusY1Ii4Hd3O6gLdY2NbhHchd3YAT_Q1QOm0BqrfY_4",{"id":341,"color":217,"description":342,"extension":155,"meta":343,"name":344,"slug":345,"stem":346,"__hash__":347,"count":181},"tags\u002Ftags\u002Fnuxt.yml","Nuxt.js framework for Vue.js applications",{},"Nuxt","nuxt","tags\u002Fnuxt","QwQk7HOatKzP3xW3-ie3L7_OJ7O8hbqCT2E8AUtrV2o",{"id":349,"color":192,"description":350,"extension":155,"meta":351,"name":352,"slug":353,"stem":354,"__hash__":355,"count":171},"tags\u002Ftags\u002Fplugins.yml","Extending tools and frameworks through plugin systems",{},"Plugins","plugins","tags\u002Fplugins","gShR9UaVAM-OLItdfQRg89U_mFSX53KgzFge6eQGSaE",{"id":357,"color":174,"description":358,"extension":155,"meta":359,"name":360,"slug":361,"stem":362,"__hash__":363,"count":181},"tags\u002Ftags\u002Fpostgresql.yml","PostgreSQL database tutorials, tips, and best practices",{},"PostgreSQL","postgresql","tags\u002Fpostgresql","o-29A3fv27MHMpunvcXvumOEdfKJJ_Wu6s_Wdej2ynI",{"id":365,"color":153,"description":366,"extension":155,"meta":367,"name":368,"slug":369,"stem":370,"__hash__":371,"count":189},"tags\u002Ftags\u002Fprojects.yml","Articles about personal and professional projects",{},"Projects","projects","tags\u002Fprojects","L834U-TbUh7RZkMdabAGEHgsgGb1hUWpWeIomHD81sE",{"id":373,"color":374,"description":375,"extension":155,"meta":376,"name":377,"slug":378,"stem":379,"__hash__":380,"count":161},"tags\u002Ftags\u002Freact.yml","cyan","React library guides for building user interfaces",{},"React","react","tags\u002Freact","Cl0931Ka3nLB6sYwUevYf3q--ugJfBakfGOEXDpY6Mw",{"id":382,"color":374,"description":383,"extension":155,"meta":384,"name":385,"slug":386,"stem":387,"__hash__":388,"count":171},"tags\u002Ftags\u002Fsaas.yml","Building and running software as a service products",{},"SaaS","saas","tags\u002Fsaas","74u9GtZbJ7IF37YdnFP6JagBgw0PblIZK2mc3r8bbew",{"id":390,"color":174,"description":391,"extension":155,"meta":392,"name":393,"slug":394,"stem":395,"__hash__":396,"count":171},"tags\u002Ftags\u002Fstellar.yml","Stellar blockchain network and cryptocurrency development",{},"Stellar","stellar","tags\u002Fstellar","H71kcSAHbcG_q3Y5cFkgonNN5uH5JxVsXlZjLaotbnk",{"id":398,"color":374,"description":399,"extension":155,"meta":400,"name":401,"slug":402,"stem":403,"__hash__":404,"count":171},"tags\u002Ftags\u002Ftailwindcss.yml","Tailwind CSS utility-first styling framework",{},"Tailwind CSS","tailwindcss","tags\u002Ftailwindcss","_Q7hBntSUWoSWUcYMwmpz1kfCE7RVlSTR9U86k3av_g",{"id":406,"color":174,"description":407,"extension":155,"meta":408,"name":409,"slug":410,"stem":411,"__hash__":412,"count":189},"tags\u002Ftags\u002Ftypescript.yml","TypeScript language features, type safety, and development tips",{},"TypeScript","typescript","tags\u002Ftypescript","zv13aSlv3NhTqdsNRYQ0pKjE5j8rZZk5zv2kD6guG4c",{"id":414,"color":217,"description":415,"extension":155,"meta":416,"name":417,"slug":418,"stem":419,"__hash__":420,"count":171},"tags\u002Ftags\u002Fvalidation.yml","Validating input and data at every layer of an application",{},"Validation","validation","tags\u002Fvalidation","Y2whDaQYOSOUCRjs2TcEedcEvVA8a2b3kq_-xULT3gY",{"id":422,"color":217,"description":423,"extension":155,"meta":424,"name":425,"slug":426,"stem":427,"__hash__":428,"count":171},"tags\u002Ftags\u002Fvps.yml","Virtual Private Server setup and management",{},"VPS","vps","tags\u002Fvps","SOzIPECxOX5g_l0rF3QhJEWwMnOeRe0htUuhWc62PXE",{"id":430,"color":174,"description":431,"extension":155,"meta":432,"name":433,"slug":434,"stem":435,"__hash__":436,"count":161},"tags\u002Ftags\u002Fwordpress.yml","WordPress CMS and related topics",{},"WordPress","wordpress","tags\u002Fwordpress","FiVBFOXCbR45_HKOqwcZAu9dDru5YOemYUcilPwarYQ",{"tag":438,"articles":440,"relatedTags":594},{"id":382,"color":374,"description":383,"extension":155,"meta":439,"name":385,"slug":386,"stem":387,"__hash__":388},{},[441],{"id":442,"title":102,"author":443,"body":447,"categories":582,"date":583,"description":584,"extension":585,"head":586,"image":587,"meta":588,"minRead":161,"navigation":589,"ogImage":586,"path":103,"robots":586,"schemaOrg":586,"seo":590,"sitemap":591,"stem":104,"tags":592,"__hash__":593},"articles\u002Farticles\u002Fjobven.md",{"name":444,"avatar":445},"Peter Oliha",{"src":446,"alt":444},"\u002Fassets\u002Fimages\u002Fauthors\u002Fpeter-oliha.jpg",{"type":448,"value":449,"toc":575},"minimark",[450,465,470,473,476,480,483,512,516,519,545,549,552],[451,452,453,459,460,464],"p",{},[454,455,102],"a",{"href":456,"rel":457},"https:\u002F\u002Fjobven.com\u002F",[458],"nofollow"," is a job posting API built from the data infrastructure I created for ",[454,461,110],{"href":462,"rel":463},"https:\u002F\u002Fmaplestack.ca\u002F",[458],".",[466,467,469],"h2",{"id":468},"the-backstory","The Backstory",[451,471,472],{},"MapleStack aggregates thousands of Canadian tech jobs by scraping directly from employer career pages. After building and refining that system - handling the scrapers, normalizing data, keeping everything fresh - I realized other developers could use the same infrastructure.",[451,474,475],{},"Rather than everyone solving the same hard problem (reliable job data collection), I packaged what I'd built into an API. Jobven gives developers access to the same quality data that powers MapleStack.",[466,477,479],{"id":478},"what-makes-it-different","What Makes It Different",[451,481,482],{},"Jobven collects job postings directly from employer career pages - the original source. This means:",[484,485,486,494,500,506],"ul",{},[487,488,489,493],"li",{},[490,491,492],"strong",{},"Fresh data"," - Jobs appear as soon as employers post them",[487,495,496,499],{},[490,497,498],{},"No duplicates"," - Each posting traced to a single source",[487,501,502,505],{},[490,503,504],{},"Structured metadata"," - Skills, salary, location all normalized",[487,507,508,511],{},[490,509,510],{},"Verified employers"," - Every job linked to a real company",[466,513,515],{"id":514},"who-its-for","Who It's For",[451,517,518],{},"Jobven is built for developers creating:",[484,520,521,527,533,539],{},[487,522,523,526],{},[490,524,525],{},"Niche job boards"," - Remote-only, industry-specific, regional",[487,528,529,532],{},[490,530,531],{},"Recruiting tools"," - Match candidates, track hiring trends",[487,534,535,538],{},[490,536,537],{},"Career platforms"," - Add job recommendations to your product",[487,540,541,544],{},[490,542,543],{},"Market intelligence"," - Analyze hiring patterns and salary data",[466,546,548],{"id":547},"try-it","Try It",[451,550,551],{},"The API has a free tier with 750 calls\u002Fmonth - enough to build and test real features.",[484,553,554,561,568],{},[487,555,556],{},[454,557,560],{"href":558,"rel":559},"https:\u002F\u002Fjobven.com\u002Fdocs",[458],"Documentation",[487,562,563],{},[454,564,567],{"href":565,"rel":566},"https:\u002F\u002Fjobven.com\u002Fsignup",[458],"Sign up free",[487,569,570],{},[454,571,574],{"href":572,"rel":573},"https:\u002F\u002Fjobven.com\u002Fpricing",[458],"Pricing",{"title":576,"searchDepth":161,"depth":161,"links":577},"",[578,579,580,581],{"id":468,"depth":161,"text":469},{"id":478,"depth":161,"text":479},{"id":514,"depth":161,"text":515},{"id":547,"depth":161,"text":548},[369],"2025-12-03","Jobven is a job posting API that collects listings directly from employer career pages. Fresh, structured job data for developers building job boards and recruiting tools.","md",null,"\u002Fassets\u002Fimages\u002Fblog\u002Fjobven.png",{},true,{"title":102,"description":584},{"loc":103},[369,178,386],"pjrg1NVbMA5WnvsX8huNC-TP8ArJ80jbYcubm7HZez0",[595,597],{"id":365,"color":153,"description":366,"extension":155,"meta":596,"name":368,"slug":369,"stem":370,"__hash__":371},{},{"id":173,"color":174,"description":175,"extension":155,"meta":598,"name":177,"slug":178,"stem":179,"__hash__":180},{},1792716694166]