jobsuche
A Rust interface for the Bundesagentur für Arbeit Jobsuche API
Access Germany's largest job database programmatically. Search for jobs, get detailed information, and access employer data through a type-safe, ergonomic Rust API.
Features
- 🔍 Rich Job Search: Filter by location, job title, employment type, contract type, and more
- 📄 Detailed Job Information: Get comprehensive details about specific job postings
- 🏢 Employer Data: Access employer logos and information
- 🔄 Automatic Pagination: Iterate over all results seamlessly
- 🦀 Type-Safe API: Strong typing with enums for all parameters
- ⚡ Sync & Async: Both synchronous and asynchronous clients
- 🎯 Based on gouqi: Built with the same battle-tested patterns as gouqi
Installation
Add this to your Cargo.toml:
[]
= "0.1"
# Optional: Enable async support
= { = "0.1", = ["async"] }
Quick Start
use ;
Usage Examples
Advanced Filtering
use ;
let options = builder
.was
.wo
.umkreis // 100km radius
.angebotsart // Regular employment
.befristung // Permanent only
.arbeitszeit
.veroeffentlichtseit // Last 2 weeks
.zeitarbeit // Exclude temp agencies
.build;
let results = client.search.list?;
Pagination
// Manual pagination
for page in 1..=5
// Automatic pagination - get all results
let all_jobs = client.search.iter?;
println!;
Job Details
let job_listing = /* ... from search results ... */;
// Get comprehensive job information
let details = client.job_details?;
println!;
println!;
println!;
println!;
println!;
println!;
Employer Logos
use File;
use Write;
let job = /* ... from search results ... */;
// Try to get employer logo (many employers don't have one)
if let Some = &job.kundennummer_hash
Type-Safe Parameters
Employment Types (Angebotsart)
use Angebotsart;
Arbeit // Regular employment
Selbstaendigkeit // Self-employment
Ausbildung // Apprenticeship/Dual study
PraktikumTrainee // Internship/Trainee
Contract Types (Befristung)
use Befristung;
Befristet // Fixed-term contract
Unbefristet // Permanent contract
Working Time (Arbeitszeit)
use Arbeitszeit;
Vollzeit // Full-time
Teilzeit // Part-time
SchichtNachtarbeitWochenende // Shift/Night/Weekend
HeimTelearbeit // Home office/Remote
Minijob // Mini job
Known API Quirks
Based on GitHub issues:
-
404 Errors (Issue #61): Job details may return 404 even if the job appears in search results. Jobs expire quickly.
-
403 Errors (Issue #60): Sporadic rate limiting may occur. The client will return
Error::Forbiddenin these cases. -
Employer Search (Issue #52): Case-sensitive and exact-match only:
- ✅ Works:
"Deutsche Bahn AG" - ❌ Doesn't work:
"deutsche bahn"or"bahn"
- ✅ Works:
-
Employer Logos (Issue #62): Many employers don't have logos. Expect frequent 404s.
-
No Sorting (Issue #43): Results are always sorted oldest-to-newest. No way to change this.
-
RefNr Encoding: Reference numbers must be base64-encoded for the job details endpoint. This client handles this automatically.
Architecture
This crate follows the architecture patterns from gouqi, featuring:
- Modular design: Separate modules for different API resources
- Builder pattern: Ergonomic query construction
- Error handling: Comprehensive error types with
thiserror - Feature flags: Optional async, caching, and metrics support
- Type safety: Strong typing throughout
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT License - see LICENSE for details
Related Projects
- gouqi - Rust interface for Jira (inspiration for this crate)
- bundesAPI - Collection of German government APIs
- jobsuche-api - Official API documentation
Acknowledgments
- Built by wunderfrucht
- Architecture inspired by gouqi
- Data provided by Bundesagentur für Arbeit