Back to Blog

Python Developer Job Description Template 2026

HiringIT HiringSoftware Development

Last updated: September 17, 2026

By Tom Kenaley, President and Senior Partner, KORE1

A good Python developer job description says which kind of Python the job is (web services, data pipelines, machine learning, or automation), which Python version and framework run in production, and what the base pay is. As for money, mid-level base runs about $100,000 to $132,000 this year. Senior is $138,000 to $172,000. Most postings we see get the money roughly right. It’s the other two they skip.

Four hundred and twelve applications in nine days. A freight brokerage in Kansas City was proud of that number for about a week.

The posting said “Python Developer.” Under the title sat Django, Flask, FastAPI, pandas, NumPy, TensorFlow, AWS, “AI experience a plus,” and “3+ years of Python.” Their operations director sent it to us after the first round of phone screens. It had gone badly. Two data analysts who wrote pandas in notebooks. A bootcamp graduate with a tidy Kaggle profile. A QA automation engineer who knew pytest and Selenium cold. And exactly one backend developer who had kept a Django app alive in production. He withdrew after his second call, because nobody on the hiring side could tell him which Python version the load board ran on.

So what was the job? A Django application that matched loads to carriers, a Celery queue pulling tracking pings from roughly 60 carrier APIs, and a PostgreSQL database that the finance team queried directly, which nobody was proud of. The whole thing ran Python 3.9 on Django 4.2, and both were past the end of their security support by the time the req went up this spring. Nobody had noticed.

We rewrote it. The title became “Backend Engineer, Python (Django).” The second paragraph named Python 3.9 and Django 4.2 out loud, said a move to Python 3.12 and Django 5.2 was funded for the fall, and said the new hire would split that work with a contractor. TensorFlow came out. Flask too. Applications fell to 71, and the operations director got nervous for about two days, right up until the screens started running long because candidates wanted to talk about Celery retry logic. They hired a backend engineer off a parcel carrier’s routing team 24 days after the repost.

Freight loading dock at dawn with plain trailers backed in, the kind of operation a Python load-board application runs behind

My angle, for the record. KORE1 gets paid by the employer when someone we introduce is hired, and that includes searches run by our Python developer staffing desk. A posting good enough to hire from without us is, strictly speaking, lost revenue. I’d take the good posting. Vague ones come back to us a couple of months later anyway, usually forwarded by a hiring manager who quit opening resumes somewhere around the fortieth.

Backend, Data, ML, or Automation First

A Python developer designs, writes, tests, and maintains software written mainly in Python, most often web services and APIs, data pipelines, machine learning systems, or internal automation. The title covers all four, but the daily work, the libraries, and the people who do each one well barely overlap.

That’s a bigger problem on a job board than it sounds. The Python Software Foundation and JetBrains run a yearly survey of the Python community, and more than 30,000 people answered the Python Developers Survey 2024. Half of them had under two years of professional coding experience. Thirty-one percent had less than one. And 51% said they do data exploration and processing, which is a different job from building a web service no matter what the resume header says. A posting titled only “Python Developer” is talking to all of those people at once. Plenty will apply.

Pick the row below where the person spends Monday through Thursday. Friday can belong to something else.

Most of the week goes toA title that pulls the right poolName these in the postingUsually safe to leave off
Web services and APIsBackend Engineer, Python (Django) or Senior Python Developer, FastAPIThe framework and its version, PostgreSQL or MySQL, Celery or another task queue, pytestpandas, PyTorch, anything that lives in a notebook
Data pipelinesData Engineer, PythonAirflow, Dagster, or Prefect; dbt; the warehouse (Snowflake, Databricks, or BigQuery); pandas or PolarsDjango, Flask, front-end frameworks
Machine learning in productionMachine Learning EngineerPyTorch, Hugging Face, the serving layer, experiment tracking such as MLflowDjango admin work, spreadsheet automation
Automation and internal toolsPython Automation Engineer or Platform Engineerboto3 or the Azure SDK, CLI libraries like Typer or Click, GitHub Actions or JenkinsMachine learning frameworks, “full stack”

Some of those rows have their own templates on our site. A language-neutral backend seat gets a wider pool from our backend developer job description template. Pipeline-first work fits the data engineer job description better, and model training or serving work belongs on a machine learning engineer posting. A Django app with a React front end is often better served by a full-stack developer job description that happens to mention Python. If you’re still torn, our guide to hiring Python developers spends far longer on choosing the lane than this page will. The template further down defaults to the web services row, with bracketed swaps for the other three.

Python 3.10 Loses Security Fixes in October

Python ships on a calendar. A new version arrives every October, gets about eighteen months to two years of bug fixes, and then gets security patches only until five years after its first release. The version status page in the Python Developer’s Guide lists every branch. Python 3.9 reached end of life on October 31, 2025. Python 3.10 follows this October, the same month 3.15 is scheduled to ship.

That makes the version line in a posting very easy to date. Senior candidates date it immediately.

When that PSF survey closed in late 2024, 15% of respondents were on Python 3.10 and another 12% were on 3.9 or older. Once this October is over, every one of those versions is past security support. Some of those teams upgraded. Plenty didn’t. A fair share of the Python reqs going out this fall belong to them.

Django adds its own dates. According to the Django project’s download page, extended support for Django 4.2 LTS ended April 7, 2026, with 4.2.30 as the last release. Django 5.2 LTS is covered until April 2028. The current feature release is 6.1.

What runs in productionSecurity support, as of September 2026What a senior candidate assumes
Python 3.9 or olderOver. Python 3.9 ended October 31, 2025An upgrade is coming, and the only open question is whose job it is
Python 3.10Ends October 2026Same question, one month later
Python 3.11 or 3.12Security patches until October 2027 or October 2028A normal shop. Nothing to explain
Python 3.13 or 3.14Full bug-fix supportA team that upgrades on schedule, and maybe a question about free-threading
Django 4.2 LTSEnded April 7, 2026See the first row
Django 5.2 LTSCovered until April 2028Where most Django teams ought to be sitting right now

“Python 3.x” is the line I’d kill first. A specialty pharmacy in Tampa sent us a senior Python req last spring that said exactly that, and the x was carrying a lot of weight. Their claims service ran on Python 3.9. Getting to 3.12 was ordinary work. Getting past 3.12 wasn’t, because a benefits vendor’s SDK pinned numpy<2, and NumPy didn’t support Python 3.13 until version 2.1, per the NumPy 2.1.0 release notes. No NumPy 1.x release ever shipped wheels for 3.13. One pinned line in a vendor’s package, and the whole service had a ceiling. It wasn’t in the posting.

We put that in the posting almost word for word, minus the vendor’s name. “Python 3.9 today. Moving to 3.12 this quarter. Anything past that depends on a vendor’s NumPy pin, and you’d own that conversation with them.” The engineer they hired came from a health insurer’s claims platform across the bay in St. Petersburg. On her first call with us she asked who the vendor was before she asked about pay. She’d already been through one NumPy 2 migration and knew what the vendor calls would be like.

Maintenance technician on a ladder replacing a fluorescent tube in an old brick warehouse, like an overdue Python version upgrade

One more note on versions, and it only matters for some seats. Python 3.14, released October 7, 2025, made the free-threaded build (CPython without the global interpreter lock) officially supported under PEP 779, at a cost the release notes put at roughly 5 to 10% on single-threaded code. It isn’t the default build. Most web and data teams haven’t touched it. They don’t need to. But if your seat is CPU-bound Python that has spent years inside multiprocessing workarounds, a line saying you’re evaluating it will get read by precisely the engineers who have been waiting for it.

uv, Poetry, or a requirements.txt Nobody Owns

How does your team install things? Almost no Python posting says. Senior engineers would trade a paragraph of culture copy for that one sentence, because it tells them who owns dependency upgrades and whether last Tuesday’s build can be reproduced next Tuesday.

The PSF survey asked which tools people use to isolate project environments. Plain venv led at 62%. Poetry had 18% and Conda 19%. Astral’s uv, which first appeared on PyPI in February 2024, was already at 11% in its first year of being counted. Quick, for a package manager. Python also has a standard lock file now. PEP 751, accepted on March 31, 2025, defines pylock.toml, so “we have a lock file” is becoming a normal thing to be able to say.

What does a candidate actually infer? A requirements.txt with 140 unpinned lines says nobody has touched dependencies on purpose in a while. Guess who will. “uv, a committed lock file, Ruff on every commit, mypy in CI” says the opposite, and it also filters out people who find that kind of discipline annoying. Good. You want them filtered.

Framework lists get the same scrutiny. FastAPI, Django, and Flask came in at 38%, 35%, and 34% in that survey, close enough that plenty of postings list all three. Your team almost certainly doesn’t run all three. List the one you do. A couple of the top-ranking Python templates online still name Pyramid next to Django and Flask. The same survey put Pyramid at 1%, and experienced candidates can spot a copied posting from that single word.

Hand tools hung on a workshop pegboard, a picture of the Python toolchain a job description should name

Type hints deserve a line of their own. Not a paragraph. “Typed, checked with Pyright in CI” and “untyped legacy code, typing new modules as we go” describe very different Mondays, and both are perfectly honest things to put in a posting.

What to Pay, Junior Through Staff

Federal wage data has no line for Python developers. Software developers as a whole make a decent stand-in. The May 2025 wage profile from the Bureau of Labor Statistics counts 1,687,890 of those jobs nationally, and it puts the median at $135,980 a year, the 25th percentile at $105,210, and the 75th at $171,980. That middle half lines up almost exactly with where our mid-level and senior Python placements land. Nice when that happens. It doesn’t always.

LevelU.S. base salary, 2026Ask for this instead of a years count
Junior (up to 2 years)$72,000 to $98,000A merged pull request a senior engineer reviewed, and what changed because of the review
Mid-level (about 3 to 5 years)$100,000 to $132,000A service, pipeline, or job they have kept running in production for a year or more
Senior (about 6 to 9 years)$138,000 to $172,000A slow endpoint, query, or batch job they fixed, with before and after numbers
Staff or lead engineer (10 years and up)$170,000 to $210,000A standard or internal tool other teams adopted without being told to
Senior machine learning or AI engineer (Python)$165,000 to $200,000A model they took from a notebook to a monitored endpoint

Those bands come from our Python developer salary guide, which also covers total compensation at employers that grant equity. Los Angeles and New York pull toward the top of each row. Dallas sits lower. For a specific metro, the salary benchmark assistant is free and faster than anything I could tabulate here.

Then post the number. If you want a legal reason, New Jersey’s pay transparency law is the one I’d point to, because it’s recent and it reaches further than people assume. It took effect June 1, 2025. The New Jersey Department of Labor says it covers employers with 10 or more employees over 20 calendar weeks that do business in the state, employ people there, or take job applications there, and that last part is the one remote Python postings tend to miss. It wasn’t the first state, either, since California, Colorado, and Washington all had range rules on the books before it. Honestly, the law is the smaller reason. Engineers compare offers in group chats, and a blank where the range should be gets read as a low number every single time.

Python Developer Job Description Template

Square brackets are blanks to fill. Parentheses hold notes meant for you, so delete every one of them before the posting goes live. A section that doesn’t describe your team should come out entirely. Padding it is worse.

Job Title

[Backend Engineer, Python (Django) / Senior Python Developer, FastAPI Services / Data Engineer, Python and Airflow / Python Automation Engineer] (Keep Python in the title and add the lane. A bare “Python Developer” draws from every row of the first table on this page.)

About the Role

We’re a [size] [industry] company based in [city], and we need a [senior] Python developer to [build and run (service or product area) / move (data) from (sources) into (warehouse) / put (models) into production / automate (process)]. This person reports to [role]. Day to day, the closest partner is [team].

Version, Framework, and Toolchain

  • Python [3.11 / 3.12 / 3.13] in production. [If services run different versions, say which run which.]
  • [Django 5.2 LTS / FastAPI with Pydantic v2 / Flask] [Data seats: Airflow, Dagster, or Prefect, with dbt]
  • Dependencies managed with [uv / Poetry / pip and a pinned requirements file], lock file committed [yes / not yet]
  • Linting with [Ruff / Black and flake8], type checking with [mypy / Pyright], [enforced in CI / optional / not yet]
  • Data in [PostgreSQL / MySQL / Snowflake / BigQuery], background jobs on [Celery / RQ / Dramatiq / none]
  • Deployed to [AWS / Azure / GCP / on-prem] through [GitHub Actions / GitLab CI / Jenkins], about [N] times a [day / week]
  • [Upgrade status, stated plainly. “Python 3.9 today, with the move to 3.12 funded for Q1 and shared with a contractor.”]

What You’ll Work On

  • Take features in [named service, pipeline, or tool] from the first API or data contract all the way to production
  • Write pytest tests that the next engineer can run and trust
  • Read and comment on code from a team of [N], and expect the same scrutiny back
  • Find and fix slow code, whether it’s an ORM query, an event loop blocked by a synchronous call, or a pandas step that should have been SQL
  • [On-call reality: “Take a turn on the rotation about one week in (N)” / “No on-call, business-hours support only”]
  • [Upgrade share: “Plan on roughly one day a week, through March, for the Python 3.12 and Django 5.2 move.”]
  • [Regulated work: operate inside (HIPAA / PCI DSS / SOX) controls, including change tickets and access reviews]

What You Bring

  • [3+ / 6+] years writing Python that runs in production, including [a service / a pipeline / a tool] you owned end to end
  • Working depth in [Django / FastAPI / Airflow / the lane’s core library], at or near the version named above
  • SQL you can explain, and a working sense of what your ORM or dataframe library sends to the database
  • Tests as a habit. Not a cleanup task.
  • [Async seats: real asyncio experience, including what happens when something blocks the event loop]
  • One piece of your own code you’d defend line by line, and one you’d rewrite. (Put this in the posting. Candidates who have both are usually worth the call.)

Nice to Have

  • [Industry] experience (Only if the domain is genuinely slow to learn, like freight rating, pharmacy claims, or trading.)
  • A major-version upgrade you led, Python or framework [if your stack is behind]
  • [CPU-bound seats: time with the free-threaded build or with subinterpreters]
  • Rust or C extensions [only if the team already maintains some]
  • Open-source contributions (Nice to see. Don’t require them. Plenty of excellent engineers have spent their whole careers on private code.)

Base Pay and Where You’ll Work

The base range for this role is [$X to $Y], with [bonus target / equity / neither] on top and [health, retirement, and time-off summary]. Location is [remote, U.S. only / hybrid near (city) / the (city) office]. [On-call: rotation length, and roughly how many pages a typical week brings.] (Use a real range from the table above. Some states, New Jersey among them, also require a general description of benefits, so this line doesn’t need to be clever. It just needs to exist.)

The Python Req Questions That Come Up Most

Day to day, what does a Python developer do?

Python developers build and maintain software written mainly in Python, usually web services and APIs, data pipelines, machine learning systems, or internal automation, along with the tests, code reviews, and production fixes that come with that work.

The lane matters more than the verb. A backend developer’s week is endpoints, queries, and queues. A data engineer’s week is schedules, schemas, and whatever broke overnight. Same language. Very different Tuesday.

Django, Flask, and FastAPI all in one posting, is that a problem?

Usually, yes, unless your team genuinely runs all three, because a list of every popular framework reads like a posting nobody finished rather than a stack somebody maintains.

Across the whole PSF and JetBrains survey the three were nearly tied, 38%, 35%, and 34%. Your codebase isn’t a survey. Name the one you run, add a second only if a real service uses it, and let the third go.

How many years of Python should a senior posting ask for?

Five or six, as a loose floor at most, since a years count can’t separate an engineer who has owned production services from someone who has written scripts on the side for a decade.

Evidence filters better on a senior Python developer job description. A slow endpoint they fixed, with numbers. A migration they actually finished. A service that paged them at night until they made it stop. I’ll admit the years line is easier for a coordinator to screen against. That’s why nearly every posting leans on it. It’s also why nearly every posting gets the same pile of resumes.

What base range belongs on a Python developer posting in 2026?

$138,000 to $172,000 in base pay, for a senior Python developer posting in the U.S. this year. Mid-level usually takes $100,000 to $132,000, before bonus or equity.

Staff and lead engineers go higher, usually somewhere from $170,000 to $210,000. Machine learning seats run higher too, near $165,000 to $200,000 base for senior people, and total compensation at equity-paying employers can clear all of those by a wide margin. City moves it. So does urgency.

Is a junior Python developer posting worth running at all?

Only if someone senior has real hours blocked every week to review that person’s code, because a junior hire without review time tends to create more rework than finished work in the first six months.

When that time exists, junior postings fill fast. The pool is enormous. Write the commitment into the posting (“you’ll pair with a senior engineer twice a week”). The strongest junior candidates look for that sentence specifically. Most of them have heard stories about the other kind of first job.

Python developer or data engineer, which title fits a pipeline job?

Data engineer, in most cases, when the work is moving and modeling data on a schedule, because pipeline specialists search for that title first and many of them never type Python into a job board at all.

Keep Python in the body, right next to Airflow or dbt, so keyword searches still find it. There’s one exception. Picture a small team where one person writes the pipelines and also keeps a Flask API alive on the side. That person really is a Python developer. Say both halves in the posting, and budget for someone a little more senior than you’d planned.

Where This Template Stops

A posting gets the right people to raise a hand. It can’t tell you which of them can do the work. For that part, our guide to Python developer interview questions covers what to ask at each level, including the async and data-pipeline questions that separate production experience from tutorials.

Short, bounded Python work, a FastAPI rewrite or a Django 4.2 to 5.2 move with a real finish line, often suits contract staffing better than a permanent seat. The engineer who’ll own that service for the next three years is a direct hire. Model training and LLM feature work is a different search, and our AI and ML engineer staffing recruiters run it on a separate bench from the backend Python desk.

Two numbers from our side. Python contract searches on our desk average 22 days to the first submitted candidate. Retention sits at 92% when we check back at the twelve-month mark. If you’ve got a Python req drafted, send it to a recruiter on our Python desk and we’ll tell you which lane it reads as. Sometimes it isn’t the one you meant.