Running a One-Person SaaS From Azerbaijan
I built BirJob alone, from Baku. It is a job aggregator that pulls vacancies from over 90 sources — company career pages, government portals, local job boards — normalizes them, deduplicates them, and surfaces them in one place. There is also a paid layer: companies can pin sponsored job postings at the top of the feed, and HR professionals can subscribe to access a candidate database. Every line of code was written by one person. Every legal question was researched by one person. Every payment integration decision was made by one person. This is what that actually looks like.
I am not writing this to inspire you or to tell you that if you just grind hard enough you will succeed. I am writing it because most of the content about building SaaS products is written by people in San Francisco, for people in San Francisco. The tooling they recommend, the payment processors they use, the legal frameworks they describe — almost none of it directly applies when you are operating from Azerbaijan. So this is the version I wish had existed when I started.
1. What It Is Actually Like
Building a software product in Baku is not like building one in Berlin or Boston. The market is smaller, the payment infrastructure is different, the legal landscape is specific to Azerbaijani law, and the technical community is a fraction of the size. None of these things are insurmountable. But they do mean that you cannot simply follow a tutorial written for a Western audience and expect everything to translate.
The practical reality of running BirJob day to day: scrapers run on GitHub Actions every four hours. They hit somewhere between 80 and 90 live sources on each run, depending on which ones have gone down or started blocking cloud IPs that week. The results feed into a Neon PostgreSQL database. The frontend is a Next.js application deployed on Vercel. I check the GitHub Actions logs in the morning the way some people check their email. When a scraper breaks — and they break often, because websites change their HTML structure without warning, or switch to JavaScript-rendered SPAs, or start blocking server IPs — I fix it. Nobody else does.
On the business side: I handle support tickets myself, usually via a contact form that sends me an email. I review new user registrations. I approve or reject sponsored job postings before they go live. I monitor the Epoint payment webhook logs when something looks off. I wrote the Terms of Service and Privacy Policy myself after reading the relevant Azerbaijani laws. I set up the Telegram channel and bot, which now sends automated job alerts to thousands of subscribers without any ongoing work on my part. All of this is normal for a solo project. What makes it occasionally exhausting is that there is no one to hand anything off to.
2. The Legal Side Nobody Talks About
When people write about launching a SaaS product, they tend to gloss over the legal parts. The advice is usually "just use a template Terms of Service" or "consult a lawyer." In Azerbaijan, the template ToS you find on the internet was not written with Azerbaijani law in mind, and a lawyer who understands both e-commerce and software licensing is not easy to find. So you end up doing the research yourself.
The Personal Data Law ("Fərdi məlumatlar haqqında")
Azerbaijan has a personal data protection law, officially titled "Fərdi məlumatlar haqqında" Azərbaycan Respublikasının Qanunu. It has been in force since 2010 and has seen updates since. The law establishes that any operator collecting personal data must inform users about what data is being collected, the purpose of collection, and to whom data may be transferred. Consent must be obtained before collection. Users have the right to access, correct, and delete their data.
For BirJob, this is relevant in several ways. We collect email addresses, names, and uploaded CVs from candidates. We also collect company names and contact details from HR users. The Privacy Policy needs to explicitly state what we collect, why, how long we retain it, and what third parties (Cloudflare, Neon, Vercel) may process it. It also needs to state users' rights under the law. A generic GDPR-style policy is close but not identical to what is required under Azerbaijani law, and you cannot simply copy-paste a European privacy policy and be done with it.
The practical implication: when a candidate uploads a CV to BirJob, that CV contains highly personal information — work history, address, sometimes photos. Access to that CV is gated behind HR subscription authentication. CVs are stored in Cloudflare R2 with presigned URLs that expire. The Privacy Policy documents all of this. Not because I expected an audit, but because it is the honest thing to do and because users deserve to know what happens to their data.
Consumer Protection ("İstehlakçıların hüquqlarının müdafiəsi haqqında")
The Consumer Protection Law is relevant because BirJob takes money from companies for sponsored job postings. That creates a commercial relationship with obligations. The law requires that price information be clear and accurate before purchase, that refund conditions be stated, and that the service delivered match what was described at the time of sale.
In practice, this shaped the sponsored job posting flow. Before a company pays, they see the exact price (30 AZN for 7 days, 50 AZN for 14 days, 80 AZN for 30 days), what the posting will include, and how long it will remain active. The Terms of Service describe the refund policy explicitly: no refund once a posting has been approved and gone live, because the service has already been delivered. If a payment succeeds but the posting is rejected for content reasons, a refund is issued. These are not just good business practices — they are legally required to be stated clearly.
E-Commerce Law ("Elektron ticarət haqqında")
Azerbaijan's e-commerce law ("Elektron ticarət haqqında") establishes the legal basis for electronic contracts, digital transactions, and the obligations of online service providers. It requires that electronic contracts contain certain disclosures: who the seller is, what the product or service is, pricing, the process for completing the transaction, and how to store or access the contract after conclusion.
This is why, in the BirJob checkout flow, the confirmation page acts as a receipt. After a successful Epoint payment, the user sees the order ID, the item purchased, the price paid, and the duration. This is not just UX polish. It satisfies the requirement that the user have access to the terms of the transaction.
Writing Terms of Service and Privacy Policy That Actually Cover Everything
I spent several evenings writing both documents from scratch. The approach I took: read the actual laws, not summaries of the laws. Then map every obligation in the law to a corresponding clause in the document. The result is longer than most users will ever read, but it is legally grounded.
Key things the BirJob Terms of Service covers that a generic template might miss for the Azerbaijani context: the fact that payments are processed by Epoint (an Azerbaijani entity) under Azerbaijani banking regulations; that disputes are subject to Azerbaijani jurisdiction; that the platform is an aggregator and not responsible for the accuracy of third-party job listings; and that sponsored postings are subject to manual review before going live.
The Privacy Policy similarly names each data processor (Neon for database, Cloudflare for storage, Vercel for hosting, Google Analytics for analytics, Telegram for notifications) and describes what data each one may access. Users are also told that they can request deletion of their account and data by contacting us, which is a requirement under the personal data law.
Do You Need a Business Registration to Charge Money Online?
This is the question I spent the most time on, and the honest answer is: it is complicated, and the right answer for your situation depends on factors I cannot advise on here. In Azerbaijan, operating a commercial online service and receiving payments generally requires some form of business registration — either as an individual entrepreneur ("fərdi sahibkar") or as a legal entity ("hüquqi şəxs"). The specific requirements and tax obligations vary.
What I can say is that operating without any legal structure creates real risks, especially once revenue reaches a level where it attracts attention. Epoint, like any legitimate payment processor, has KYC requirements for merchants. Getting set up requires providing identification and in some cases business registration documents. This is not optional and not something you can defer indefinitely. Plan for it from the beginning rather than retrofitting it after the fact.
3. Payments in AZN
The first time I looked into payment processing for BirJob, my instinct was to reach for Stripe. Stripe is well-documented, has excellent APIs, handles subscriptions, webhooks, and disputes cleanly, and has extensive documentation. Then I looked at the coverage map. Stripe does not support Azerbaijan. Paddle does not support Azerbaijan. Gumroad does not support payouts to Azerbaijani bank accounts. Lemon Squeezy does not either.
This is the part that no one who writes "how to monetize your SaaS" tutorials ever mentions, because for most of their readers it is not a problem. For developers in Azerbaijan, it is the first wall you hit.
Epoint as the Local Gateway
Epoint is an Azerbaijani payment processing company that supports card payments in AZN. It is integrated with the local banking infrastructure and supports Visa and Mastercard issued by Azerbaijani banks. The integration model is straightforward: you register as a merchant, receive a public key and a private key, and then interact with their API to initiate payment sessions.
The flow works like this: your server sends a signed, base64-encoded payload to
https://epoint.az/api/1/request. The payload includes the order ID, amount in AZN, a
description, and redirect URLs for success and error states. If the request succeeds, Epoint returns a
redirect URL. You send the user to that URL. The user enters their card details on Epoint's hosted payment
page. After the transaction completes, Epoint sends a webhook to your server with the result, signed with
your private key. You verify the signature, update the order status in your database, and activate the
service.
The signature scheme is: SHA1 hash of PRIVATE_KEY + base64_payload + PRIVATE_KEY, encoded
as base64. It is not the most modern cryptographic approach, but it works, and verifying it with a timing-
safe comparison prevents signature oracle attacks.
// Simplified signature verification
function verifySignature(data: string, signature: string): boolean {
const expected = createSignature(data); // SHA1(PRIVATE_KEY + data + PRIVATE_KEY)
const a = Buffer.from(expected);
const b = Buffer.from(signature);
if (a.length !== b.length) return false;
return crypto.timingSafeEqual(a, b);
}
One important implementation detail: Epoint sends webhooks, but you cannot rely solely on the webhook for
critical state changes. Network issues happen. Implement idempotent webhook handling: if you receive the
same order_id twice with status success, handle it gracefully without
double-crediting the account.
Dealing with Azerbaijani Bank Cards
Most Azerbaijani users have cards issued by Kapital Bank, ABB (Azerbaijan Business Bank), PASHA Bank, or one of the other major local banks. These are standard Visa and Mastercard cards and work with Epoint without issues. Where you occasionally see friction: some older savings account cards from state banks are not set up for online transactions by default. Users sometimes need to enable "internet banking" in their bank's app before a payment goes through.
This produces support tickets. The user sees a declined payment, assumes your integration is broken, and contacts you. The answer is almost always: their card is not enabled for online transactions, they need to contact their bank or enable it in the mobile app. It helps to add a note about this in your payment UI.
Transaction Fees and How They Compare Globally
I am not going to publish exact fee agreements here, as these can vary by merchant and are subject to negotiation. What I will say is that Epoint's fees are in the range of what you would expect from any card processor outside the major Western markets — slightly higher than Stripe's base rate, but not dramatically so. The difference is that there is no monthly platform fee from Epoint, which matters when you are early stage and transaction volume is low. Stripe would also have no monthly fee in that scenario, but Stripe is simply unavailable.
The real cost comparison is not Epoint vs. Stripe. It is Epoint vs. not having any payment processing at all, which was the alternative. From that perspective, Epoint is excellent.
4. Marketing with Zero Budget
I did not run paid ads. Not because I have a philosophical objection to them, but because the unit economics did not make sense at early stage. The revenue per user is low enough that a meaningful paid acquisition campaign would not break even for a long time, if ever, unless conversion rates were very high. They never are early on.
So everything I did for growth was either free or extremely cheap.
SEO as the Primary Growth Channel
Search engine optimization was the first and most important investment, and it cost nothing except time. The core insight: people in Azerbaijan search Google for jobs every day. They search for things like "Bakıda iş" (jobs in Baku), "vakansiya" (vacancy), "IT vakansiyaları" (IT vacancies), or by specific company name. If BirJob appears in those results, those users find the product organically without any acquisition cost.
The implementation: each job listing has a dedicated URL with a structured slug. The sitemap is automatically generated and pinged to Google after every scraper run. Meta tags, canonical URLs, and structured data are set correctly for every page. The blog section exists partly for SEO value — articles about the Azerbaijani job market, how to write a CV in Azerbaijani context, interview preparation — these attract long-tail search traffic that would not otherwise land on a job aggregator.
SEO compounds over time. The pages that rank today were indexed months ago. The content published now will pay dividends six months from now. It is slow and requires patience, but it is the only acquisition channel that does not require ongoing spend to maintain.
Telegram as a Distribution Channel
Azerbaijan has very high Telegram adoption relative to many other markets. Many Azerbaijanis use Telegram as their primary messaging app, and Telegram channels are a common way people follow news and updates. BirJob has a Telegram channel that sends automated job alerts. Users subscribe once and receive new vacancies matching their preferences without ever coming back to the website.
The mechanism is a cron job that runs on a schedule, queries the database for jobs added in the last few hours, formats them as Telegram messages, and sends them to the channel via the Telegram Bot API. The Telegram Bot API is completely free. The infrastructure cost of the notification system is essentially zero. And yet it reaches users directly, with no email open rate problem, no spam filter, no unsubscribe friction — users just mute or leave the channel if they stop wanting it.
Thousands of people subscribed to the Telegram channel before BirJob had any paid features at all. It established the brand in a place where the target audience was already spending time.
Word of Mouth in a Small Market
Azerbaijan's tech and startup community is small. Everyone knows everyone, or at most is one introduction away. A mention in the right chat group, a recommendation from a well-connected person, a post in a popular Telegram group — these things spread more effectively here than in a larger market because the network is denser. BirJob got its first few hundred users almost entirely through word of mouth in developer and job seeker communities.
The downside of this: bad word spreads just as fast. If the product is unreliable, or if there is a bad user experience, you will hear about it through the same channels. There is no hiding behind anonymity in a small market. Your reputation is everything.
Why Paid Ads Did Not Make Sense Early
The math is simple. If a sponsored job posting costs 30 AZN for 7 days, and a paid click from Google Ads in Azerbaijan costs 0.20–0.50 AZN, you need to convert 60–150 clicks to get one paying customer. At early stage, with an unproven conversion funnel and no social proof, those conversion rates are unrealistic. You would spend 30 AZN in ad costs for every 30 AZN in revenue — before accounting for the time spent managing campaigns. It made more sense to invest that time into SEO and product improvement.
Paid ads might make sense later, when conversion rates are proven, when there are testimonials and organic traffic as a baseline, and when the average revenue per user is higher. But for a bootstrapped solo product at launch, the ROI is poor.
5. The $45/Month That Runs Everything
People building SaaS products often have surprisingly high infrastructure costs because they over-engineer their stacks. BirJob's total monthly infrastructure spend is approximately $45. This is the real number, not a marketing claim.
The Actual Cost Breakdown
- Vercel Pro — $20/month. Hosts the Next.js frontend. The Pro plan is necessary because the free tier has bandwidth and build minute limits that a real product hits quickly. Vercel handles edge caching, automatic HTTPS, preview deployments, and serverless function execution. It is good value for what it provides.
- Neon — $19/month. Serverless PostgreSQL. Neon handles the entire data layer: job listings, users, applications, sponsored posts, HR subscriptions, payment records, blog posts, scraper configuration, analytics events. The serverless model means you do not pay for a machine sitting idle. You pay for compute used. At BirJob's current scale, the Neon Launch plan covers everything with room to spare.
- Domain — approximately $6/month averaged. birjob.com, registered and renewed annually. The actual cost is $70–80/year depending on the registrar. No premium domain pricing involved.
What Is Free
- GitHub Actions. The scraper runs on GitHub Actions on a cron schedule. Each run uses approximately 5–10 minutes of compute. GitHub's free tier for public repositories is generous enough that this costs nothing. For a private repository, the free tier still covers it at this frequency.
- Cloudflare R2. Object storage for user-uploaded CVs and images. R2 has no egress fees, which matters for a product where users download CVs. The free tier covers 10 GB of storage and 10 million read operations per month. BirJob does not come close to those limits at current scale.
- Telegram. The bot API is free. The channel is free. Sending thousands of messages per day costs nothing.
- Google Analytics 4. Analytics are free. The admin panel has custom analytics tables built on top of logged events, but GA4 handles traffic and behavior analysis without cost.
- Epoint. No monthly fee. You pay per transaction as a percentage of the amount processed. When there are no transactions, there is no cost.
- Resend. Transactional email. Free tier covers up to 3,000 emails per month, which covers email verification, password resets, and notification emails at current volume.
What This Would Cost on Traditional Infrastructure
If I had built the same product on AWS with a traditional architecture — EC2 for the application server, RDS for PostgreSQL, S3 for storage, CloudFront for CDN, SES for email, ECS or EKS for the scraper workers — the monthly cost would be somewhere between $150 and $400, depending on instance sizes and traffic. The Vercel + Neon + Cloudflare R2 stack delivers comparable or better performance at a fraction of the cost, because modern managed services have significantly better pricing than raw cloud compute for products at this scale.
The tradeoff is that you are locked into specific vendors. Migrating away from Vercel or Neon later is work. But for a bootstrapped solo product trying to reach profitability before spending more on infrastructure, optimizing for cost at this stage is the right call.
6. Working Alone
There is a version of the solo founder narrative where everything is empowering and autonomous and you are a lone genius executing on a vision. That is not what it actually feels like most of the time. Most of the time it feels like a long list of things to do, with no one to help prioritize them, and no one to ask when you are unsure.
The Loneliness of Solo Development
When something breaks at an unusual time — a scraper that was working fine for months suddenly returns zero results, and you trace it down to the target site having completely restructured their HTML markup overnight — there is no one to share the frustration with. There is no one to say "yeah, that is annoying, let me look at it while you take a break." You look at it, you fix it, you move on.
This compounds over time. Not catastrophically — most days are fine. But the absence of a second person means there is no redundancy in knowledge, no second set of eyes on code before it ships, no one to catch the mistake you are too close to see. Code review for a solo project is reading your own code the next morning and hoping you catch what you missed the night before.
Decision Fatigue
Every decision about BirJob — technical, design, business, legal, support — lands on one person. What color should this button be? What should the error message say when a payment fails? Should the scraper retry on a 503 response, and if so, how many times with what backoff? Should a refund be issued in this edge case? Should this new feature be built now or deferred?
These are not hard decisions individually. But the volume of them is relentless, and they do not stop coming. The mental overhead of being the designer, developer, marketer, product manager, and support team simultaneously is real. The way I manage it: I try to establish defaults and policies rather than making case-by-case judgments. If the refund policy is written down, I apply the policy. If the naming convention is established, I follow it without reconsidering. Reducing the number of decisions that require active thought reduces fatigue.
When to Say No to Features
Feature requests come from users, from my own ideas, and from observing what competitors do. The default answer to all of them should be no, until there is a clear and compelling reason for yes.
Every feature added to a solo-maintained product is a liability as much as an asset. It needs to be built, tested, documented, and maintained. If the underlying API it depends on changes, someone needs to update it. That someone is always you. The question to ask before adding any feature: is the value of having this feature greater than the ongoing cost of maintaining it? Often the answer is no.
BirJob has features I wish I had not built yet. The email alerts system, for instance, required a significant amount of infrastructure — a subscriber database, an HTML email template, a delivery mechanism, an unsubscribe flow, compliance with email regulations — for a feature that the Telegram channel already covers for most users. In retrospect, that time could have been spent on things with higher impact.
The Mental Model: Build for Yourself First
The most reliable filter I have found for feature and product decisions: would I personally use this? When I built the Telegram notifications, it was partly because I wanted to use them myself. When I added the job alert preferences, it was because I wanted to filter out categories that were not relevant to me. Building for yourself is not the same as building only for yourself — you still need to consider whether others will want the same things. But starting from genuine personal need tends to produce better decisions than starting from assumptions about what users might want.
7. The Azerbaijan Market Specifically
Azerbaijan has a population of approximately 10 million people. Internet penetration is high relative to the region — somewhere in the range of 80–85% of the population has internet access, which translates to roughly 8 million internet users. Of those, the working-age population actively using job search platforms is a subset. Total addressable market for a job platform in Azerbaijan is meaningful but not enormous.
Established Competition
The Azerbaijani online job market already has established players. Hellojob.az is the largest job aggregator by listing volume. Jobsearch.az is a significant competitor. Boss.az has been a well-known platform for years. isveren.az, vakansiya.az, and a handful of others also hold market share. These are not small operations — they have sales teams, offices, and years of brand recognition.
BirJob's differentiation is that it aggregates from all of these plus direct company career pages, government portals, and international sources. It does not compete with hellojob in the sense of trying to get companies to list directly on BirJob instead of hellojob. It complements the ecosystem by adding a single interface where all of those listings are searchable together.
Whether that differentiation is enough to build a sustainable business around is a question the market will answer over time. So far, the answer seems to be: yes, there is a segment of users who value comprehensiveness over depth, and who prefer not to check five different sites every morning.
Advantages of Being Local
Being Azerbaijani is an advantage in building a product for Azerbaijani users. Not in an abstract cultural sense, but in concrete practical ways. I know which companies are considered desirable employers. I know that certain government agencies have their own career portals that a foreign developer would not think to look for. I know that SOCAR, Kapital Bank, PASHA Bank, and a few other major employers generate significant job search interest. I know the language, obviously, which means the UI is not a translation — it is written by someone who thinks in Azerbaijani.
I also know the friction points. Azerbaijani bank cards sometimes need to be enabled for online payments. Some users are not comfortable with card payments and prefer alternatives. The trust barrier for a new platform is higher in a market where online scams exist and where users have learned to be cautious. All of these things shaped product decisions.
Challenges: Small TAM and Limited Payment Infrastructure
The total addressable market for a premium job platform in Azerbaijan is small in absolute terms. Even if BirJob captured a large market share of the HR subscription market, the maximum revenue ceiling is much lower than it would be in a market like Turkey or Germany, let alone the United States. This is a real constraint on the business.
The limited payment infrastructure was covered in the payments section. But the broader point is that every part of the modern SaaS tooling ecosystem assumes a global payment infrastructure that does not exist here. Recurring billing, subscription management, revenue recognition, refund processing — all of these things that Stripe handles automatically need to be built or managed manually when you use a local gateway that does not offer a subscription API.
BirJob's HR subscription system, for instance, does not have true auto-renewal. When a subscription expires, the HR user sees a prompt to renew. They go through the payment flow again. This is more friction than Stripe's seamless recurring billing, but it is what is available with the current infrastructure.
8. Revenue Model
BirJob has two revenue streams: sponsored job postings and HR subscriptions. There is no advertising. There are no banners, no display ads, no sponsored content disguised as editorial. This is a deliberate choice.
Sponsored Job Postings
Companies pay to pin a job posting at the top of the BirJob feed for a specified duration. The pricing tiers are 30 AZN for 7 days, 50 AZN for 14 days, and 80 AZN for 30 days. The posting appears above organic results for the relevant categories, is marked clearly as sponsored, and links either to an external apply page or to an internal application form hosted on BirJob.
Every sponsored posting is reviewed manually before going live. This is not automated. I read the job description, check that the company exists, verify that the contact information is valid, and approve or reject. This takes time, but it prevents garbage from appearing in the sponsored slots, which would damage the platform's credibility.
HR Subscriptions
HR professionals — recruiters, HR managers, hiring managers — can subscribe to access BirJob's candidate database. Candidates who register on BirJob and upload their CV become searchable by subscribed HR users. The subscription costs 15 AZN for 7 days or 40 AZN for 30 days.
This model depends on two things: enough candidates registering and uploading CVs to make the database valuable, and enough HR users willing to pay for access. Building both sides of this marketplace is hard. The candidate side grew organically through the Telegram channel and organic search — people found BirJob while looking for jobs and registered. The HR side has grown more slowly, because HR professionals are a smaller audience and the value proposition requires more explanation.
Why Advertising Is a Bad Model for Job Boards
Display advertising on a job board creates a conflict of interest. Your incentive becomes maximizing pageviews rather than user success. A user who finds a job quickly and leaves is bad for an advertising model. A user who visits repeatedly, fails to find what they want, and keeps coming back generates more impressions. The incentives of advertising revenue point away from actually helping users find jobs.
Beyond the ethical problem, the economics are poor. CPM rates for Azerbaijani traffic are low. Display ads on a site with reasonable but not enormous traffic generate tens of dollars per month, not hundreds. It is not worth the degraded user experience for that revenue.
The sponsored posting and subscription model aligns incentives correctly. Companies pay when they want to fill a position — they want the platform to work well because their money is on the line. HR users pay for access to candidates — they want the candidate pool to be real and the search to be useful. When the product works well, people pay for it. When it does not, they do not.
The Economics: Breaking Even
The monthly infrastructure cost is approximately $45, which is roughly 77 AZN at current exchange rates. A single 30-day sponsored posting covers the monthly hosting cost. That is the breakeven point in its simplest form. Two or three sponsored postings per month plus a handful of HR subscriptions produces meaningful margin above operating costs.
The realistic question is not whether BirJob can cover its costs — it can. The question is whether it can grow to a scale where it represents meaningful income for the person running it. That requires either growing the number of transactions significantly, increasing prices as the platform's value proposition strengthens, or both. Neither happens automatically. Both require sustained effort in sales (outreach to companies), product improvement (making the HR tools genuinely useful), and growth (continuing to build the job seeker audience).
9. What I Have Learned After 6+ Months
The scraper is never finished. Websites change their structure. Companies switch from static HTML to JavaScript-rendered SPAs. APIs get versioned or deprecated. Government portals go down for weeks. Cloudflare blocks cloud IP ranges. This is not a problem to solve — it is a maintenance regime to accept. Budget time every week for scraper fixes, because they will always need them.
The legal work is real work, not a formality. Reading Azerbaijani law and translating its requirements into product decisions took real time. It was not glamorous. No one will ever see most of it. But it matters, both for ethical reasons and for long-term business stability.
Infrastructure choices made early are hard to change later. The database schema I designed at launch is still largely what is in production. The architectural decisions — Next.js App Router, Neon, Cloudflare R2 — are all still in place. Choosing tools that are capable of growing with the product matters more than using the newest or trendiest option.
Free channels are undervalued. The Telegram channel, organic search traffic, and word of mouth delivered more users than any other channel at a cost of essentially zero. Paid acquisition is not the default — it is an option for later, when the economics support it.
Epoint works. The integration is not as elegant as Stripe, the documentation is not as comprehensive, and the ecosystem of plugins and libraries is smaller. But it processes real payments from real Azerbaijani users reliably. That is what matters.
Saying no is a skill. I said yes to too many things in the first few months. Each yes added technical debt or maintenance burden. The discipline to decline feature requests, including ones from myself, got stronger over time. Ruthless prioritization is not optional when you are the only person working on the product.
User feedback is asymmetric. People who are unhappy contact you. People who are happy usually do not. This means your support inbox is a biased sample of the experience. The Telegram channel subscription count, the number of returning users in analytics, and the organic growth of the candidate database are better signals of whether the product is actually working.
The small market is not an excuse. It is a constraint, yes. But constraints force creativity. The limited payment infrastructure forced a direct relationship with Epoint, which gave me more control over the checkout UX than I would have had with a third-party service. The small market forced focus — I could not be everything to everyone, so I had to be very good at one specific thing. The density of the local network meant that word of mouth was more effective than it would be in a larger, more anonymous market.
10. Advice for Others Building in Small Markets
If you are building a software product in a small market — whether that is Azerbaijan, another Caucasus country, a smaller Eastern European market, or anywhere else outside the Western SaaS mainstream — here is what I would tell you based on the experience of building BirJob.
Start with the payment question on day one. Do not build a product and then figure out how to charge for it later. Figure out what payment infrastructure is available to you, what the merchant onboarding requirements are, and what currencies you can accept. This shapes everything from pricing to checkout UX to legal structure.
Learn the local laws yourself. You may not have access to affordable specialist legal advice. That means you have to read the primary sources: the actual laws, in the actual language. It is not as hard as it sounds. Most legislation has a clear structure. Reading the personal data law, the e-commerce law, and the consumer protection law yourself will give you a better understanding of your obligations than a generic template ToS ever will.
Use the channels where your users already are. In Azerbaijan, that is Telegram. In another market it might be WhatsApp, Facebook, LinkedIn, or a local social network. Go where people already spend time rather than trying to make them come to you on a new platform.
Keep infrastructure costs low and stay on managed services. The $45/month stack that runs BirJob would cost 3–8x more on traditional cloud infrastructure. Every dollar spent on infrastructure is a dollar that needs to come from revenue. In a small market, you cannot assume the revenue will scale fast enough to absorb high fixed costs.
Be local genuinely, not performatively. Building a product in the local language with local cultural knowledge is a real advantage over any competitor who does not have it. But it only works if it is genuine. A product that is "translated" into Azerbaijani but clearly designed for a different context will not feel right to users. Build it as if you are building it for yourself, because you are.
The small market size means you can know your users. In a large market, you are anonymous. Your users are a demographic. In a small market, you can actually know who they are, talk to them in the same communities, and get direct feedback. This is an enormous advantage that large competitors in the same space do not have. Use it.
Sustainable beats fast. A bootstrapped solo product in a small market is not going to hypergrow. It is not going to attract venture capital on the basis of market size. The realistic trajectory is steady, compounding growth over years. That is fine. Sustainable revenue from a product you built alone, in a market you understand, is a genuinely good outcome. It does not need to be a unicorn to be worth building.
BirJob is still being built. The scraper list grows. The candidate database grows. The product improves every week because someone is paying attention to it. It is not a large company or a fast-growing startup. It is a useful product built carefully for a specific market, by one person, from Baku. That is enough.
If you are building something similar and want to compare notes, the contact form is at birjob.com/contact. I read every message.
