How to build a niche job board with no-code
Niche job boards are kind of a big deal. Have you ever used any of the “big” job sites, like Indeed or Monster? In their effort to aggregate every job that’s out there, they sacrifice relevancy. I think it’s great that 305 companies are hiring for a digital marketing manager in San Francisco right now, but chances are only a few of those will actually match your skills and the type of people that you want to work for.
The thing with marketing skills today is, well, it’s just hard to keep up.
We see new disciplines and job titles popping up every single day. Marketing operations managers. Growth analysts. Content Performance teams… Both hiring managers and marketing professionals are struggling to keep up with the skills that modern marketers need to master in order to bring value to their organisations. Just another sign of the massive gap in our educational programs today.
From the beginning, I wanted Marketing Robots to help marketers cross that gap between the skills they need and what’s being demanded from employers. Now I can say I’m one step closer to that goal with the addition of a completely automated job board for digital marketers to the site.
These are the steps I followed to develop the tool… without writing a single line of code.
Let’s build this thing.
Building a job board from scratch can be a huge undertaking. Especially if, like myself, you are not proficient with programming languages like SQL or PHP. The interest in niche job boards is such that some indie makers are even coming up with clever solutions to support non-technical founders. For a small monthly investment, you can be up and running with tools like Sheet2Site or Table2Site, both of which allow you to visualise your online spreadsheet (Google Sheets, Airtable) of curated jobs into a fully working website. Pretty neat.
I actually launched my first version of Marketing Robots using Sheet2Site. From concept to MVP in just under 1 week. But for the longer term, I really wanted to build something on my own, learn along the way and minimise costs. So I broke the task into smaller pieces and put together an action plan for each of these three steps:
- Data aggregation – the feeds bringing in fresh new jobs into the board
- Data storage and normalisation – storing and cleaning the raw, ugly data the comes from the job feeds
- Data visualisation – presenting the information on the front end of the site in a user-friendly way
Let’s have a look at each of those.
Aggregating the data.
A quick Google search will point you in at least 3 different directions for feeding your job board. I think any of these are totally viable, but there are pros and cons associated:
Option A: Let’s start simple, what about manual curation? I think there’s definitely a benefit for both your product and your users to carefully curate each job that goes into the board. What that means in practice, is that you’ll have to spend a lot of time doing the research, checking multiple sites and manually gathering the data. Is that scalable in the long term? At the very least it’s less than ideal. You can definitely start simple and do some things manually (did you know Instagram’s founders Kevin Systrom and Mike Krieger used to send welcome emails to new signups manually in the early days of the app) but you also need to automate the donkey work in the longer term.
Option B: A more sophisticated and convenient solution could be to use a service like Jobspikr. Tools like this can give you a clean, multi-source feed without much hustle. The problem? It’s yet another monthly cost. Not ideal if you want to build and launch your product on a dime but totally worth it if you’re willing to make the investment.
Option C: Ok what about partnering with the big job boards (Indeed, Moster, Glassdoor)? You power up your board by promoting their jobs and driving traffic to their own sites. That sounds like a win-win for everyone doesn’t it?. That’s exactly what I thought. Well, it turns out, in order for any of these sites to get out of bed and give you access to their APIs you need to drive a minimum amount of monthly traffic to your site (and by ‘your‘ what they really mean is ‘their‘ sites).
I don’t have 5,000 (legitimate?) unique page views per day. Damn, I don’t want 5K page views per day, I’m trying to run a NICHE job board remember? So this option might be simply not realistic if you’re just starting and don’t have a consolidated user base just yet. Another dead end.
Time for Option D?
Any of those options might suit you depending on your situation and budget. I personally went down the RSS alley.
RSS feeds have been around since, like, forever. They are a straightforward way of sourcing information from other sites and most job boards would provide an access point. So I went through the process of defining custom searches on different sites for the types of jobs that I want to aggregate. An RSS feed from Indeed might look like this and it’s as simple as the URL that’s generated when you do a search on that platform.
The benefits? It’s quite straightforward to get up and running and you still give credit and attribution to the original source site. Any job gathered from, say Indeed.com, would resolve to a final URL that contains the necessary UTM parameters to tell the hiring manager that the job post was originally sourced from that site.
Storing and structuring the data.
With a magnificent stream of jobs flowing into your job board, all you need to do next is to start “saving” that data somewhere. There are definitely a few options here, but following our strict no-code approach the safest and easiest is to use something like Google Sheets or AirTable. Any of those two options provide a quick, free, cloud-based, user-friendly way of managing your data.
Next, I needed to connect point 1 (the RSS data feed) to point 2 (Google Sheets). I use IFTTT (If This Then That). IFTTT is slightly more focused on individuals rather than businesses. You can seemingly join tools like Google Sheets or Salesforce together, but you can also do things like “turn on my thermostat when I’m at a certain location nearby my house, then tweet that”. Stuff like that.
Following the Indeed.com example, connecting an RSS feed to a Google Sheet looks as simple as this (IF new RSS feed item, THEN add a row to the spreadsheet):
So you go from something like this (RSS feed):
To this (structured data in Google Sheets):
Happy with that, I soon found the next issue along the way. I was naive to think that everything that comes out of the jobs feed would be ready and good to go for production. Nope. There are just tons of details to address when it comes to making your data presentable for your users. Everything from de-duping data, to splitting cells or tagging your data.
So it was clear that some sort of data cleansing would be required. There’s always the manual approach (ugh). This part is something that Zapier could handle quite well, but again it would just make their cost go even higher… In the end, I came through the solution by pure chance while reading a random comments thread on Product Hunt…
Introducing Parabola 😍
Parabola used to be just my favourite Tool song. Now it’s also that one single no-code app I’d take with me to a desert island. It allows you to make almost any type of data transformation through a visual interface. You plug in your data source (i.e. Google Sheets), then create any amount of custom rules for how you want your rows and columns to be reformatted.
The set of data transformation rules behind Marketing Robots’ job board looks like this:
Some of the things happening in the background.
Looking at the original RSS output, you can see how several data points like Job title, Company name and Location all come in one single field.
This sucks big time if you want to make each of those things search-able or filter-able. So you can instruct Parabola to split that field, for instance, after each “-“ character.
All the sudden, your data is correctly formatted in three separate neat fields.
Let’s say you don’t want to show the date when the job was posted, but instead how many days it has been since the job was published. This makes it easier for the user to quickly grasp how long the job has been out for.
You can change the format of your date value if needed:
Sort your jobs in descendent order (so newest first):
Finally, compare the data to the current time using ‘days’ as your measurement unit:
One of my favourite things is using Parabola to add tags to each job. This is essential for keeping that connection between the jobseeker’s skills and what the company is looking for.
You can create and import a separate spreadsheet containing all the possible tags you want to add, in my case, digital marketing skills:
An If/Else operator is then used comparing the list of tags to the job description. If any of the 40 tags are found in the description, we add a new column with the value set to TRUE. If a tag is not found, the same column receives the value FALSE.
Jobs are then grouped by, that’s right, all the matching tags. One give jobs might include 5 tags, where others might just have one or none. The trick is because the data we’re importing is so niche and specific plus the list of tags is quite comprehensive, most jobs will get a tag match.
E voilá, a custom list of dynamic tags for each of your (probably hundreds) job records:
Massive kudos to Brian @ Parabola for helping me with this one.
You can go wild and daisy-chain Parabola with other no-code tools. For example, I use Zapier to tweet any new jobs added to my live Google Sheets via Buffer; a Social Media scheduling tool. This allows me to queue up new tweets from @marketingrobots and send them at the most convenient times.
Because each field comes from a different column, Zapier can order each value individually for you to create custom tweets for each job.
The Zapier sequence (the Zap) looks like this:
- A new row (a job) is added to Google Sheets by Parabola
- Zapier rearranges some of the fields in the spreadsheet into a friendly tweet
- The job is sent to Buffer
The outcome of all these Parabola tweaks is what goes into the live job board on the website.
Visualising the data:
For a while visualising the data on the site was a big black hole in the project. In fairness, you can stick your Google Sheets doc into your website quite easily. The problem is how to make it look good and professional. I’m totally guilty of spending way too much time on these details. I know I shouldn’t. I know sometimes it doesn’t matter. But good design can also go a long way.
I use WordPress to run the site. One of the reasons why I always go with WordPress is because of their scalability and the whole ecosystem of plugins and integrations the support. The indie maker in me who checks into Product Hunt and Indie Hackers every morning wants to use Webflow and Bubble (the FOMO is real) but I know my way around WordPress (just use whatever works for you).
NinjaTables is what I use for embedding my live job data on Google Sheets as well as styling the table. It’s a simple WordPress plugin that can connect different data sources and transform those into a highly customisable table with tons of design options. All without any code.
That’s about it. You can check out the final result right here.
No code is a rapidly growing democratisation movement. It allows us, non-technical but curious people, to materialise our ideas and lowers the entry barrier for becoming a creator (which I truly believe we all are).