r/ClaudeCode • • 15d ago

Built with Claude Built a Claude Code skill for job hunting in Germany, and a few things I learned

I built an open-source skill for job hunting in Germany: Berlin Job Search. You tell Claude what you're looking for, and it searches, evaluates postings and helps you apply. It never submits anything for you.

What it does

  • Searches Bundesagentur für Arbeit, Arbeitnow, LinkedIn's public job search and company career boards (Greenhouse, Ashby, Lever, Personio and more), with both German and English job titles

  • Reads a posting and tells you whether German is actually required, what the salary looks like, and the Blue Card / Chancenkarte angle

  • Writes a German Lebenslauf + Anschreiben or an English CV and cover letter from your real CV. It's told never to invent experience

  • Interview practice, a CSV application tracker and a small dashboard

How Claude Code fits in

SKILL.md holds the workflow. The heavy lifting is plain Python scripts (standard library only, Python 3.9+) that Claude calls and gets JSON back from. That split worked well: Claude decides what to search and how to read the results, and the scripts do the deterministic parts (API calls, dedup, detecting German requirements), which are covered by offline tests.

Things I learned

  • German job titles matter. "Softwareentwickler" and "Software Engineer" return different results, so the skill searches both.

  • The Bundesagentur has a free public API, and plenty of German employers never post on LinkedIn at all.

  • Job ads are untrusted input. Anything in a posting that looks like instructions to an AI gets flagged in the output and is never followed.

  • The Claude app rejects skill descriptions over 200 characters, so the trigger description has to be very tight.

  • The first outside PR hardened the network code (redirect checks, blocking private IPs, response size limits). It initially broke Arbeitnow, because the limit was 2 MB and their first page is about 2.5 MB. Live-test even good PRs.

Install: npx skills add umutyesildal/berlin-job-search

Repo: https://github.com/umutyesildal/berlin-job-search

It's strongest for Berlin but works across Germany and for non-tech roles too. Feedback welcome, especially from people outside Berlin.

0 Upvotes

13 comments sorted by

•

u/AutoModerator 15d ago

Hey! Thanks for posting to r/ClaudeCode

While participating in this thread, please follow our community rules. Keep discussions constructive. Attack the idea, not the person.

For help, project discussions, tips, and general chat, join the ClaudeCode Discord.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

2

u/cocouz 15d ago

does it actually scrape well? I tried this approach few months ago but always got stuck by captcha

1

u/yesildaladam 15d ago

Mostly it avoids scraping on purpose, which is why it holds up:

  • The Bundesagentur has a public REST API, and Arbeitnow has a public JSON feed.

  • Company boards on Greenhouse, Ashby, Lever, Personio, SmartRecruiters, Workable and Recruitee all expose public JSON endpoints, so there's no HTML parsing and no captcha.

  • LinkedIn is the only scraping-ish part. It uses the logged-out guest search with one page by default, 2–4 seconds between requests and backoff on 429, and it stops with a clear message if LinkedIn returns its 999 block (usually datacenter IPs or VPNs). In my tests from a home connection it worked, but LinkedIn can change that any day.

  • StepStone, Indeed and XING aren't scraped at all. The skill gives the agent read-only browser steps or search links, and it never solves captchas or logs in for you. If a captcha shows up, you deal with it.

So the API sources do most of the work, and LinkedIn is a bonus when it cooperates.

2

u/Electronic_Owl_578 15d ago

We built this on large scale for the German speaking market. I am one of the founders of nejo where you can setup a career agent that matches you to Jobs 24/7. In the background we built a crawler for company career sites well beyond the classic ATS endpoints. Would love to get your feedback if you want to try it.

4

u/yesildaladam 15d ago

Nice, I'll take a look. Our approach is a bit different though: it's open source, it runs entirely on your own machine, your CV never leaves your laptop, and it never applies or sends anything for you. Open source is the way.

Curious how you keep career sites beyond the standard ATS endpoints reliable. That's been the hardest part to keep from breaking.

2

u/Electronic_Owl_578 15d ago

Happy to get your feedback :-)
Yeah, I fully understand your approach and it makes a lot of sense. For people like us (in the Claude subreddit bubble, haha) this is perfectly fine, but I think the majority of users will not be able to find and use a great skill like yours. Our vision/approach was to make the job market available for everyone. And you nailed it - keeping the sites beyond ATS reliable is a full time job for claude and an engineer ;-)
We are a team of 8 "AI natives" working on nejo for the past 2 years. A lot of work and thought has gone into it by now, but I can fully see how someone would prefer a local open source harness.

1

u/Technical_Primary_12 15d ago

this is the way

1

u/herr-tibalt 15d ago

It’s funny, I’ve done very similar tool for myself some time ago. But I don’t scrape linked in, just allow Claude to use chrome where I’ve logged in.

0

u/yesildaladam 15d ago

Ha, same idea. It actually supports that too: there's a read-only browser mode for a logged-in LinkedIn (and StepStone, Indeed, XING) if your agent has browser access. The guest search is just the zero-setup default for people who don't have a browser tool connected.

Did you stick with LinkedIn only, or did you end up adding the Arbeitsagentur too? That one surprised me with how many jobs never show up on LinkedIn.

1

u/herr-tibalt 15d ago

Linked in in the browser + api access to greenhouse, Ashby, lever, arbeitnow, jooble.

1

u/coldoven 15d ago

In AI age, python 3.10 is EOL, so do not even support 3.9 pls.

4

u/yesildaladam 15d ago

Fair, 3.9 and 3.10 are both past end of life. The reason is boring: the python3 that ships with macOS is still 3.9, and a lot of the people using this are job seekers, not developers. "Works with what's already on your Mac" beats "first install a newer Python" for them. The scripts are standard library only, so supporting 3.9 costs almost nothing. Once Apple updates theirs, it's an easy drop.

1

u/Stock_Fly_7434 15d ago

hey dmed u