Metadata-Version: 2.4
Name: linkedin-jobs-api-py
Version: 0.1.2
Summary: Unofficial LinkedIn Jobs scraper API for Python
Author-email: Anselme Wilfried R OUEDRAOGO <wilfried.ouedraogo@itpartages.com>
License: MIT License
        
        Copyright (c) 2025 Anselme Wilfried R OUEDRAOGO
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
        
Project-URL: Homepage, https://github.com/ANSELME-TIC/linkedin-jobs-api-py
Project-URL: Documentation, https://github.com/ANSELME-TIC/linkedin-jobs-api-py#readme
Project-URL: Repository, https://github.com/ANSELME-TIC/linkedin-jobs-api-py
Project-URL: Issues, https://github.com/ANSELME-TIC/linkedin-jobs-api-py/issues
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.32.0
Requires-Dist: selectolax>=0.4.3
Provides-Extra: dev
Requires-Dist: pytest>=8.4.2; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: requests-mock; extra == "dev"
Requires-Dist: black; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Requires-Dist: mypy; extra == "dev"
Dynamic: license-file

# linkedin-jobs-api-py

[![PyPI version](https://badge.fury.io/py/linkedin-jobs-api-py.svg)](https://badge.fury.io/py/linkedin-jobs-api-py)
[![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://www.python.org/downloads/)
[![License MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)

**Unofficial LinkedIn Jobs API for Python** - This project is inspired by an npm package [`linkedin-jobs-api`](https://www.npmjs.com/package/linkedin-jobs-api) from Vishwa Gaurav. Scrape LinkedIn job postings with all filters (keywork,location,remote, salary, experience, etc.).


## 🚀 Installation

```bash
pip install linkedin-jobs-api-py  
```

## 📖 Simple usage
```python
from linkedin_jobs_api import query

# Basic search
jobs = query(keyword="python developer", location="Paris", limit="10")

for job in jobs:
    print(f"💼 {job['position']} @ {job['company']}")
    print(f"📍 {job['location']} | 💰 {job['salary']}")
    print(f"🔗 {job['jobUrl']}\n")
   ```


## 🔍 All available filters

| Parameter | Possible values                                                                     | Example              |
|-----------|----------------------------------------------------------------------------------------|----------------------|
| `keyword` | Free text                                                                            | `"data scientist"`   |
| `location` | City/Country                                                                               | `"Paris"`, `"Dakar"` |
| `dateSincePosted` | `"1hr"`,`"24hr"`,`"past week"`,`"past month"`                                          | `"past week"`        |
| `jobType` | `"full time"`, `"part time"`, `"contract"`, `"temporary"`, `"internship"`, `"volunteer"` | `"full time"`        |
| `remoteFilter` | `"remote"`, `"on site"`, `"hybrid"`                                                    | `"remote"`           |
| `salary` | `"40000"`, `"60000"`, `"100000"`, `"120000"`                                           | `"100000"`           |
| `experienceLevel` | `"internship"`,`"entry level"`,`"associate"`, `"senior"`, `"director"`,`"executive"`   | `"senior"`           |
| `limit` | `"1"`,`"3"`....`"10"`                                                                  | `"5"`                |
| `page` | `"0"`, `"1"`, `"2"`...`"999"` (10 jobs/page)                                           | `"1"`                |
| `has_verification` | `True`/`False`                                                                         | `True`               |
| `under_10_applicants` | `True`/`False`                                                                         | `True`               |

## 💡 Complete examples

### 1. Simple search
```python
jobs = query(keyword="frontend", location="Lyon", limit="5")
```

### 2. Remote + Recent full-time
```python
jobs = query(
keyword="backend developer",
remoteFilter="remote",
jobType="full time",
dateSincePosted="past week",
limit="10"
)
```


### 3. Senior + good salary
```python
jobs = query(
keyword="software engineer",
experienceLevel="senior",
salary="100000",
location="France",
limit="8"
)
```

### 4. “Easy” jobs (verified, <10 applicants)
```python
jobs = query(
keyword="product manager",
has_verification=True,
under_10_applicants=True,
sortBy="recent"
)
```

### 5. Pagination (page 2)
```python
jobs = query(keyword="devops", page="1", limit="10") # Jobs 11-20
```

## 📋 Structure of results
```json
{
"position": "Senior Python Developer",
"company": "Google",
"companyLogo": "https://media...png",
"location": "Paris, Île-de-France",
"date": "2025-12-08",
"agoTime": "2 days ago",
"salary": "€80k-€120k",
"jobUrl": "https://www.linkedin.com/jobs/view/..."
}
```

## 🛠️ Development

Clone et install dev
```bash
git clone <repo>
cd linkedin-jobs-api-py
pip install -e .[dev]
```

## ⚠️ Warnings

- **Unofficial use** : Comply with LinkedIn's Terms of Use and rate limits.
- **Browser simulation**: Complete headers simulating an AJAX request from a real browser
- **Rate limiting awareness**: Moderate usage recommended, proxies required for high volumes
- **Changes** : LinkedIn may modify its APIs (regular updates).

## 📄 Licence

MIT License - see [LICENSE](LICENSE)

---

**⭐  Star so useful!!** | **🐛 Issues** : [GitHub](https://github.com/ANSELME-TIC/linkedin-jobs-api-py)



