The junior web developer salary is the number that gets written about most and verified least. Search for it and you get ranges from €38,000 to €65,000, every page quotes a different figure, and almost none of them say where it came from.
So we did it differently. This article is not a collection of other people’s estimates — it is our own measurement with the method laid open. Three data sources, all collected on 11 August 2026:
- The Entgeltatlas of the German Federal Employment Agency — official figures from employment statistics, not self-reported surveys. The relevant cut for newcomers: the median for employees under 25.
- 2,499 current job ads that we fetched, filtered and searched for salary figures ourselves. The result: most employers name no number at all — and that turned out to be the real finding.
- Our own net pay calculation using the 2026 income tax schedule, because “€55,000 gross” is close to useless for answering “can I afford to live on this?”
Where we had to correct ourselves while measuring — and we had to twice, with significant consequences for the numbers — it is written into the text. That is part of the method, not a footnote.
The short answer first
If you only want one number: around €4,157 gross per month, or roughly €49,900 per year. That is the median for all full-time software developers under 25 in Germany, according to Federal Employment Agency statistics.
Median means half earn less, half earn more. It is not an average dragged upward by a handful of top earners.
That single number comes with three catches, and they make up the rest of this article:
- It depends heavily on location. Munich and Hanover are almost 24 % apart for identical work.
- It tells you nothing about what the job ad says. Because 86.8 % of ads name no figure at all.
- It is gross. From €49,900 gross, roughly €2,648 net per month actually arrives.
What the official statistics say
Most salary sites online rest on voluntary self-reporting: users type in what they earn. That is not worthless, but it has a well-known problem — the people who report are not a random sample. Satisfied, well-paid people report differently from dissatisfied ones.
The Entgeltatlas of the Federal Employment Agency works differently. It is built on employment statistics, meaning the social security filings that employers are legally required to submit. That is a full census of employees subject to social insurance, not a survey.
We pulled the figures directly on 11 August 2026. The atlas data vintage is labelled “Entgeltatlas 2025”.
Software development occupations, highly complex activities
| Metric | Gross/month | Gross/year (×12) |
|---|---|---|
| Lower quartile (25 %) | €5,034 | €60,408 |
| Median (all age groups) | €6,301 | €75,612 |
| Upper quartile (75 %) | €7,723 | €92,676 |
But these €6,301 are not your starting salary. They are the median across all ages — from the fresh graduate to the 60-year-old architect. For newcomers, the age breakdown is what matters:
The age curve — this is where the real answer lives
| Age group | Median gross/month | Gross/year (×12) | Gap vs. entry level |
|---|---|---|---|
| under 25 | €4,157 | €49,884 | — |
| 25 to 54 | €6,238 | €74,856 | +50.1 % |
| 55 and older | €7,280 | €87,360 | +75.1 % |
This is the most defensible answer to the title question available in Germany: €4,157 gross per month.
And it carries the most important perspective with it. The jump from the entry cohort to the middle cohort is over 50 %. Your starting salary is not a verdict on your market value; it is the lowest point of a curve that rises more steeply in your first working years than it ever will again.
One caveat we will not gloss over: “under 25” is an age attribute, not an experience attribute. Someone who starts at 29 after a career change appears in the “25 to 54” group and pulls that median down, rather than showing up among the beginners. So €4,157 most accurately describes the classic path: vocational training or a degree, then straight into the job.
Frontend sits slightly below
The atlas files frontend development under its own occupational group at the “Specialist” skill level:
| Occupational group | Median overall | Median under 25 |
|---|---|---|
| Software development, highly complex (Expert) | €6,301 | €4,157 |
| Software development, complex specialist activities (Frontend) | €6,729 | €4,001 |
| IT systems analysis, highly complex | €7,133 | — |
At €156 per month, the entry-level difference is smaller than the usual “frontend pays less” debates suggest — about 3.8 %. More interesting is that this group is actually higher in the overall median. That suggests the gap here opens up between experience levels far more than between specialisations.
The finding we did not expect: almost nobody names a number
For the second part we did not rely on statistics but looked at the market itself. Using the public arbeitnow.com API we retrieved 2,499 current job ads (as of 11 Aug 2026), filtered out developer roles, removed duplicates, and searched every remaining ad’s full text for salary information.
The funnel:
| Step | Count |
|---|---|
| Job ads retrieved in total | 2,499 |
| with a developer/engineer title (excluding sales, mechanical engineering etc.) | 633 |
| in web/software development | 493 |
| after deduplication (company + title) | 388 |
| based in Germany | 310 |
| naming a concrete euro figure | 41 (13.2 %) |
86.8 % of ads name no figure. That is not a footnote, that is the answer to why nobody knows what a junior earns.
It gets sharper when you look at how often the word salary appears:
- 157 of the 310 ads (50.6 %) explicitly mention salary, pay or compensation.
- 119 of those (75.8 %) still give no number whatsoever.
These are the ads with phrases like “attractive salary”, “competitive compensation” or “performance-based pay”. They raise the subject and immediately drop it. For the applicant the outcome is identical to silence — except that it feels like information.
Only 11 of 310 ads were junior roles at all
Counting seniority levels revealed a second pattern:
| Level (by job title) | Count | Share |
|---|---|---|
| Senior / Lead / Principal / Staff | 140 | 45.2 % |
| No level stated in title | 146 | 47.1 % |
| Working student / internship / dual study | 13 | 4.2 % |
| Junior / entry level / graduate | 11 | 3.5 % |
For every advertised junior role there are nearly 13 senior roles. That matches what developer communities have been discussing for months — and it has direct salary consequences: where few positions meet many applicants, bargaining power is weaker. Knowing the market figure still beats guessing.
What the two junior ads with figures actually offered
Of the 11 junior roles, exactly two stated a range:
| Employer | Position | Location | Range |
|---|---|---|---|
| NotarPartner GmbH | Junior Fullstack Engineer (TS, React, Next.js), 100 % remote | Hamburg | €50,000 – €65,000 (fixed incl. VSOP) |
| Almedia | Junior Engineer (AI) | Berlin | €60,000 – €75,000 |
Two data points are not a statistic — which is exactly why they appear here as an example, not as evidence. What is notable is that both sit well above the official median of €49,884. That is not a contradiction but a selection effect: employers who voluntarily publish a number usually do so when the number looks good. Published salaries are systematically the better salaries.
Which makes the atlas figure the more honest anchor for your own expectations — and the advertised figures the better argument in a negotiation.
Two measurement errors of our own that we have to disclose
Two mistakes crept into this analysis, both of which materially distorted the numbers. We write them down here because a result without its error history looks smoother than it actually is.
Error 1: the missing half of the range. Our first pattern required a currency symbol directly attached to the number. But in the phrasing “Gehalt: 50.000 – 65.000 €” only the second number carries the euro sign. Result: the lower bound silently vanished and the ad was recorded as “€65,000”. This is an error that produces no error message — it just makes the result systematically too optimistic. The NotarPartner role would have appeared as €65,000 instead of €50,000 – €65,000.
Error 2: the English comma. After the fix, the pattern suddenly matched 16 fewer ads. The reason: while repairing it we had narrowed the number format to German notation (85.000), while many ads use English notation (85,000). The transparency rate appeared to collapse from 10.6 % to 5.5 % — both wrong. Only with both formats accepted did the defensible figure of 13.2 % emerge.
The instructive part: after error 1 the result looked plausible, and after error 2 it looked plausible too. None of the three intermediate versions complained. It only surfaced because we read one individual ad in its raw text and compared it against the measured output. With text analysis, a manual spot check is not a luxury — it is the only control that makes formatting errors visible at all.
And one bias we cannot calculate away
Of the 41 ads with a salary figure, 20 come from a single employer — that is 48.8 %. In total, the 41 figures are spread across only 20 distinct companies.
That means any statement of the form “ads offer a median of €X” is half a statement about the pay policy of one company. So we report both:
| Analysis | n | Median lower bound | Median upper bound |
|---|---|---|---|
| All ads with a figure | 41 | €75,000 | €110,000 |
| Excluding the largest employer | 21 | €70,000 | €85,000 |
These figures describe the developer market as a whole, not the entry segment — senior roles are included. Treat them as a ceiling marker for where the path leads, not as an entry-level expectation.
Where you work decides more than 20 %
Location is no minor detail here. From the Entgeltatlas, same occupational group, median across all age groups:
| City | Median gross/month | Gross/year (×12) |
|---|---|---|
| Munich | €7,284 | €87,408 |
| Stuttgart | €6,926 | €83,112 |
| Nuremberg | €6,868 | €82,416 |
| Frankfurt am Main | €6,822 | €81,864 |
| Düsseldorf | €6,371 | €76,452 |
| Cologne | €6,019 | €72,228 |
| Essen | €6,019 | €72,228 |
| Hanover | €5,886 | €70,632 |
| Federal state | Median gross/month |
|---|---|
| Berlin | €6,913 |
| Bavaria | €6,804 |
| Baden-Württemberg | €6,602 |
| Hesse | €6,364 |
| Hamburg | €6,329 |
| Bremen | €5,927 |
| Schleswig-Holstein | €5,887 |
| North Rhine-Westphalia | €5,842 |
Munich and Hanover are 23.8 % apart. That sounds like a clear argument for Munich — until you subtract rent. A premium of €1,400 gross per month is roughly €700 to €750 net; whether that covers the rent difference in Munich is a calculation each person has to run for their own housing situation.
This is exactly where remote work changes the logic. Working for a Munich company from a cheaper region means, ideally, a Munich salary at regional living costs. Many employers now apply location factors, though. So “do you pay location-independently?” belongs in the conversation just as much as the salary question itself.
A side finding on the pay gap that surprised us
The atlas also reports medians by gender. For our occupational group:
| Group | Women | Men | Difference |
|---|---|---|---|
| All age groups | €5,675 | €6,395 | −11.3 % |
| 25 to 54 | €5,651 | €6,318 | −10.6 % |
| under 25 | €4,176 | €4,155 | +0.5 % |
At entry level there is effectively no gap — women under 25 are marginally ahead. Across all age groups the difference is then 11.3 %.
What that means cannot be decided from these numbers alone, and we will not pretend otherwise. This is a cross-section, not a life course: we are comparing today’s entrants with today’s 45-year-olds, not the same people over time. The gap may stem from career interruptions, different negotiation outcomes, part-time effects, or simply from older hiring practices. The clean statement is: entry pay is equal today; the trajectory afterwards is not.
Why more salaries may soon appear in job ads
Our 13.2 % transparency rate is not a law of nature — it is the product of a legal situation that is currently changing.
EU Directive 2023/970 (the Pay Transparency Directive) obliges employers to tell applicants the pay range before the interview. The wording of Article 5(1), in the official German text:
“Stellenbewerber haben das Recht, vom künftigen Arbeitgeber Informationen über Folgendes zu erhalten: a) das auf objektiven, geschlechtsneutralen Kriterien beruhende Einstiegsentgelt für die betreffende Stelle oder dessen Spanne […] Diese Informationen sind in einer Weise bereitzustellen, dass fundierte und transparente Verhandlungen über das Entgelt gewährleistet werden, wie beispielsweise in einer veröffentlichten Stellenausschreibung, vor dem Vorstellungsgespräch oder auf andere Weise.”
In English: applicants have the right to receive the starting salary or its range, based on objective and gender-neutral criteria, provided in a way that enables informed and transparent pay negotiations — for example in the published job ad or before the interview.
And paragraph 2, which matters at least as much in practice:
“Der Arbeitgeber darf Bewerber nicht nach ihrer Entgeltentwicklung in ihren laufenden oder früheren Beschäftigungsverhältnissen befragen.”
That is: employers may not ask applicants about their pay history in current or previous employment.
Directive (EU) 2023/970 of the European Parliament and of the Council of 10 May 2023, Article 5. Wording retrieved from EUR-Lex on 11 Aug 2026.For newcomers, paragraph 2 is the valuable one: asking about previous pay is the most effective way to carry a low starting salary forward for years. Coming out of vocational training or a working-student job, you would otherwise open the negotiation anchored at €1,200.
The catch: Germany let the deadline pass
The transposition deadline was 7 June 2026 — under Article 34, member states had to have the necessary provisions in force by then. Germany did not.
Responding to a parliamentary question on 8 July 2026, the federal government stated that the responsible ministry had made “the necessary preparations for a bill on low-bureaucracy implementation” and was “still clarifying individual questions relevant to implementation”. The legislative procedure would be initiated afterwards.
Bundestag printed paper 21/7026 of 8 July 2026, government response to minor interpellation 21/6608. PDF retrieved 11 Aug 2026.In plain terms: at the time of writing there is no German implementing act and no published government bill. For you as an applicant that means:
- An enforceable right to the salary range does not currently exist.
- You may still ask. The directive describes what is good practice anyway — and many employers, especially in tech, already answer.
- Being asked about your current salary is still permitted. You have to respond if you want to stay in the process — but you can redirect to your salary expectation instead of naming a number from the past.
Incidentally, once the law arrives, our 13.2 % measurement should become a historical snapshot. Which is precisely why every figure in this article carries its retrieval date.
Gross is not what arrives: our own net calculation
Almost every salary article stops at the gross figure. That is the number in the contract — but not the one you pay rent with.
So we calculated it ourselves: income tax under § 32a EStG for 2026 (basic allowance €12,348), social contributions at employee rates (pension 9.3 %, unemployment 1.3 %, health 7.3 % plus half the supplementary rate, long-term care including the childless surcharge), tax class I, no children, no church tax.
| Gross/year | Social contributions | Income tax | Net/year | Net/month | Net rate |
|---|---|---|---|---|---|
| €42,000 | €9,261 | €5,160 | €27,579 | €2,298 | 65.7 % |
| €45,000 | €9,922 | €5,886 | €29,191 | €2,433 | 64.9 % |
| €48,000 | €10,584 | €6,634 | €30,782 | €2,565 | 64.1 % |
| €49,884 (median u25) | €10,999 | €7,113 | €31,771 | €2,648 | 63.7 % |
| €55,000 | €12,128 | €8,457 | €34,415 | €2,868 | 62.6 % |
| €60,000 | €13,230 | €9,829 | €36,941 | €3,078 | 61.6 % |
| €65,000 | €14,332 | €11,258 | €39,410 | €3,284 | 60.6 % |
| €75,612 (overall median) | €16,001 | €14,692 | €44,919 | €3,743 | 59.4 % |
The value worth memorising is in the last column: the net rate falls as gross pay rises. Concretely:
- From €50,000 to €55,000 gross: +€2,583 net per year — that is +€215 per month. Of the €5,000 increase, 51.7 % survives.
- From €60,000 to €65,000 gross: +€2,469 net per year. Only 49.4 % survives.
This is not an argument for negotiating less — €215 a month is a holiday over a year. But it puts things in proportion: the difference between an offer of €52,000 and one of €55,000 is about €129 net per month. If the lower offer comes with a distinctly better team, saner technology or reliable onboarding, it is almost always the better choice in your first year. Because what determines your salary in five years is not the starting figure, but what you learned in those five years.
What actually drives your starting salary
From the analysed ads and the atlas data, the levers sort by impact:
1. Location (up to 24 %). The single biggest lever, see the table above. And the only one you fully control before your first day.
2. Industry and funding model. In our data the highest ranges came from venture-funded product companies and international tech firms, the lowest from agencies and e-commerce service providers. Two ads from the same Karlsruhe service provider for Shopware and e-commerce development each quoted €55,000 – €65,000; a Berlin AI company offered €60,000 – €75,000 for a junior role.
3. Company size. Corporations have salary bands that usually sit above mid-market levels for newcomers, but leave less room to negotiate upward. Small companies are more flexible, yet often start lower.
4. The technology stack — but less than the internet claims. The entry-level difference between frontend and software development was 3.8 %. Choosing a language because it supposedly pays €10,000 more optimises the wrong variable. Where a stack effect does appear, it is usually indirect: via the industry that uses that stack.
5. Degree or no degree. We counted this across 229 permanent roles in our web development degree analysis: 76.0 % of ads never mention a degree at all, and only 8.3 % genuinely require one. For salary that means a degree opens particular doors, but it is not a pay premium.
How to actually negotiate with these numbers
Numbers only help if they reach the conversation. Concretely:
State a range, not a point. And set the lower bound at a figure you would still be happy with — not at your minimum. You will rarely be offered more than the lower bound.
Anchor with a citable source. “According to Federal Employment Agency statistics, the median for software developers under 25 is €4,157 gross per month, and the atlas reports €7,284 as the overall median for Munich. So I’m orienting myself at €52,000 to €58,000.” That is a very different position from “I’d like €55,000.”
Answer the salary-history question with the future. “In my working-student role I was at X — for this position with full-time responsibility I’m orienting myself at the market range of Y to Z.” You answer the question without setting the anchor. Once the directive is implemented, the question disappears anyway.
Ask for the range for the position. Even without a German statute this is a legitimate question, and completely routine at tech companies. The answer — or the refusal — tells you something about the employer.
Negotiate the first raise up front. The most valuable sentence in year one is not the starting figure but: “When and on what basis is salary first reviewed?” Given the +50.1 % between the entry and middle age groups, the slope matters more than the starting point.
Price the whole package. 30 instead of 26 vacation days is worth roughly €1,000 at a €55,000 salary. A paid training week, real onboarding from a senior engineer, or a transit pass can be worth more than €2,000 gross — which nets out to only about €86 per month anyway.
Frequently asked questions
What does a junior web developer earn in Germany? The median for full-time software developers under 25 is €4,157 gross per month, roughly €49,900 per year (Entgeltatlas, Federal Employment Agency, retrieved 11 Aug 2026). In frontend occupations it is €4,001. Net of tax and social contributions in tax class I without church tax, about €2,648 per month remains.
Is €45,000 too little as a starting salary? It is below the official median of €49,884, but defensible depending on region and company size — in North Rhine-Westphalia or at a small agency it is closer to market level than in Munich. The decisive follow-up question is when the first review happens. There is more than 50 % between the entry and middle age cohorts; if that increase never happens contractually, a low start becomes expensive.
Why do so few job ads list salaries? Because Germany has no obligation yet. In our analysis of 310 German developer ads, only 13.2 % named a concrete figure, even though 50.6 % raised the topic of pay. EU Directive 2023/970 mandates disclosure, but Germany let the 7 June 2026 transposition deadline pass; as of 8 July 2026 the government reported that no bill had yet been introduced.
Do frontend developers earn less than backend developers? Barely at entry level: €4,001 versus €4,157 is a 3.8 % difference. In the overall median, the frontend occupational group actually sits higher at €6,729 versus €6,301. The stack is a far weaker lever than location.
How much net remains from €55,000 gross? By our calculation, about €2,868 per month (€34,415 per year) in tax class I, no children, no church tax. The net rate is 62.6 % and keeps falling at higher salaries — in this range only around 52 % of a €5,000 gross increase survives.
Can an employer ask about my current salary? Currently yes. Article 5(2) of the EU directive prohibits the question, but without a German implementing act it is not yet enforceable. You can redirect factually to your salary expectation for the new role.
How much does salary vary by region? Munich (€7,284 overall median) and Hanover (€5,886) are 23.8 % apart. At state level the range runs from Berlin (€6,913) to North Rhine-Westphalia (€5,842). That is the strongest single factor we were able to measure.
Is a degree worth it for the salary? As a pure pay lever it is weaker than its reputation: only 8.3 % of job ads genuinely require a degree. More in our analysis of 229 permanent positions in the web development degree article.
Conclusion
The honest answer to “what does a junior web developer earn?” is around €4,157 gross per month — officially measured, not estimated. Net, that is roughly €2,648.
But the three more useful insights from this research are different ones:
First: the market is silent. 86.8 % of ads name no figure, and three quarters of those that do use the word “salary” still name none. If you do not go looking, you negotiate against information only the other side holds.
Second: the starting figure is the least important point on the curve. There is over 50 % between entry level and the middle cohort. An offer that is €3,000 better yields about €129 net per month — a year of genuine mentoring from experienced colleagues yields more.
Third: location beats stack. 23.8 % between Munich and Hanover versus 3.8 % between frontend and backend. Anyone debating the language but not the location is optimising the smaller number.
And if Germany eventually implements the EU directive, the most important part of this article will hopefully become obsolete: the fact that you have to measure salaries yourself at all.
Read on: Web development degree — is it really worth it? · Learn TypeScript · TypeScript typing · Running AI locally
