I Made My Resume Using Python — And You Can Too (with Code)
Why waste hours formatting resumes manually? Here’s how I automated mine using Python — and how you can build one yourself from scratch.

You Won’t Believe What Python Can Do With Your Resume!
I Made My Resume Using Python — And You Can Too (with Code)
Introduction: Why Let Python Touch Your Resume?
Let’s be honest — crafting a resume is not fun.
You spend hours fiddling with font sizes, alignment, bullet spacing, and exporting to PDF — only to realize something looks off on a different device. Now imagine if you could generate a beautiful, consistent, and customizable resume just by filling out a JSON or YAML file and running a Python script.
That’s exactly what I did.
In this article, I’ll show you how I created a production-ready resume using Python, with a real-world code example you can fork, clone, or improve. Whether you’re applying for your first developer job or updating your portfolio, this method will save you time — and make your resume stand out.
Step 1: Decide on the Output Format
Before diving into code, decide what you want your final resume to look like.
I chose to generate a PDF because it’s universally accepted and professional. To do this, we’ll use Python’s powerful ReportLab
or WeasyPrint
libraries. You can also explore libraries like pdfkit
, Jinja2
(for templating), or even Pydantic
for schema validation.
For this demo, I’ll show you a clean setup using Jinja2 + WeasyPrint
.
Step 2: Structure Your Resume Data
Instead of hardcoding the resume, we separate the content from the layout using a structured format like JSON or YAML.
Here’s an example resume.json
:
{
"name": "Aashish Kumar",
"title": "Full-Stack Web Developer",
"contact": {
"email": "aashish@example.com",
"linkedin": "linkedin.com/in/aashishdev",
"github": "github.com/aashishcodes"
},
"summary": "Passionate developer with 3+ years of experience building scalable web applications.",
"skills": ["Python", "Django", "React", "FastAPI", "PostgreSQL", "Docker"],
"experience": [
{
"role": "Software Engineer",
"company": "Accubits Technologies",
"duration": "Jul 2022 – Present",
"description": "Built and maintained full-stack applications using Django and React. Led a team of 3 developers."
}
],
"education": [
{
"degree": "MCA in Computer Science",
"institution": "GGSIPU, Delhi",
"year": "2022"
}
]
}
This structure makes it easy to update your resume without touching the layout code.
Step 3: Create an HTML Template with Jinja2
Now that we’ve structured our data, we’ll use Jinja2 to inject the values into a clean HTML template.
Here’s a basic template.html
:
<!DOCTYPE html>
<html>
<head>
<style>
body { font-family: sans-serif; margin: 30px; }
h1, h2 { margin-bottom: 0; }
.section { margin-top: 30px; }
</style>
</head>
<body>
<h1>{{ name }}</h1>
<h2>{{ title }}</h2>
<p>Email: {{ contact.email }} | LinkedIn: {{ contact.linkedin }} | GitHub: {{ contact.github }}</p>
<div class="section">
<h3>Summary</h3>
<p>{{ summary }}</p>
</div>
<div class="section">
<h3>Skills</h3>
<ul>
{% for skill in skills %}
<li>{{ skill }}</li>
{% endfor %}
</ul>
</div>
<div class="section">
<h3>Experience</h3>
{% for job in experience %}
<p><strong>{{ job.role }}</strong>, {{ job.company }} ({{ job.duration }})<br>
{{ job.description }}</p>
{% endfor %}
</div>
<div class="section">
<h3>Education</h3>
{% for edu in education %}
<p>{{ edu.degree }}, {{ edu.institution }} ({{ edu.year }})</p>
{% endfor %}
</div>
</body>
</html>
You can style it further with CSS for more polish.
Step 4: Generate the PDF Using Python
Install the required packages:
pip install jinja2 weasyprint
Here’s your Python script generate_resume.py
:
import json
from jinja2 import Environment, FileSystemLoader
from weasyprint import HTML
# Load data
with open('resume.json', 'r') as f:
resume = json.load(f)
# Load template
env = Environment(loader=FileSystemLoader('.'))
template = env.get_template('template.html')
# Render HTML
html_out = template.render(**resume)
# Convert to PDF
HTML(string=html_out).write_pdf('resume.pdf')
print("✅ Resume generated successfully!")
Run the script:
python generate_resume.py
Boom! You now have a resume PDF built by Python.
Step 5: Make It Your Own
Want to go further?
- Add Themes: Use multiple HTML templates for different resume styles.
- Internationalization: Add language support with translations.
- Deployment: Host it as a web app with Flask, Django, or FastAPI so recruiters can generate the latest copy on demand.
- Versioning: Save each resume version in Git with commit messages like “Added recent internship.”
Bonus: Why It Impresses Recruiters
I’ve had multiple recruiters tell me, “We loved how you built your resume programmatically. That’s unique!”
Here’s why this method stands out:
- Shows off your Python and automation skills.
- Demonstrates attention to detail.
- Indicates you value reproducibility and efficiency — two must-have traits in a developer.
Conclusion: Let Python Handle the Boring Stuff
Resumes are just structured documents — which makes them a perfect fit for code automation. By leveraging Python and templating, you gain full control, consistency, and future-proofing.
I’ve used this approach to generate different versions of my resume tailored for job roles in:
- Backend Engineering
- DevOps
- Full-Stack Development
And the best part? One data file powers them all.
You don’t need to be a pro designer — just a curious developer who wants control.
Final Thought
Don’t just build software. Use software to build your career.
If you liked this post and want the full open-source codebase, let me know in the comments!
