Name | staffspy JSON |
Version |
0.2.25
JSON |
| download |
home_page | None |
Summary | Staff scraper library for LinkedIn |
upload_time | 2025-01-06 10:13:12 |
maintainer | None |
docs_url | None |
author | Cullen Watson |
requires_python | <4.0,>=3.10 |
license | None |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
<img width="640" alt="3FAD4652-488F-4F6F-A744-4C2AA5855E92" src="https://github.com/user-attachments/assets/73b701ff-2db8-4d72-9ad3-42b7e1db537f">
**StaffSpy** is a staff scraper library for LinkedIn.
_why pay $100/mo for LSN when you could do it for free and get a nice csv to go along with it?_
## Features
- Scrapes staff from a company on **LinkedIn**
- Obtains skills, experiences, certifications & more
- Fetch individuals users / comments on posts
- Export all your connections with their contact info
- Aggregates the employees in a Pandas DataFrame
[Video Guide for StaffSpy](https://youtu.be/DNFmjvpZBTs) - _updated for release v0.2.18_
### Installation
```
pip install -U staffspy[browser]
```
_Python version >= [3.10](https://www.python.org/downloads/release/python-3100/) required_
### Usage
```python
from staffspy import LinkedInAccount, SolverType, DriverType, BrowserType
account = LinkedInAccount(
# driver_type=DriverType( # if issues with webdriver, specify its exact location, download link in the FAQ
# browser_type=BrowserType.CHROME,
# executable_path="/Users/pc/chromedriver-mac-arm64/chromedriver"
# ),
session_file="session.pkl", # save login cookies to only log in once (lasts a week or so)
log_level=1, # 0 for no logs
)
# search by company
staff = account.scrape_staff(
company_name="openai",
search_term="software engineer",
location="london",
extra_profile_data=True, # fetch all past experiences, schools, & skills
max_results=50, # can go up to 1000
# block=True # if you want to block the user after scraping, to exclude from future search results
# connect=True # if you want to connect with the users till you hit your limit
)
# or fetch by user ids
users = account.scrape_users(
user_ids=['williamhgates', 'rbranson', 'jeffweiner08']
# connect=True,
# block=True
)
# fetch all comments on two of Bill Gates' posts
comments = account.scrape_comments(
['7252421958540091394','7253083989547048961']
)
# fetch company details
companies = account.scrape_companies(
company_names=['openai', 'microsoft']
)
# fetch connections (also gets their contact info if available)
connections = account.scrape_connections(
extra_profile_data=True,
max_results=50
)
# export any of the results to csv
staff.to_csv("staff.csv", index=False)
```
#### Browser login
If you rather use a browser to log in, install the browser add-on to StaffSpy .
`pip install staffspy[browser]`
If you do not pass the `username` & `password` params, then a browser will open to sign in to LinkedIn on the first sign-in. Press enter after signing in to begin scraping.
### Output
| profile_id | name | first_name | last_name | location | age | position | followers | connections | company | past_company1 | past_company2 | school1 | school2 | skill1 | skill2 | skill3 | is_connection | premium | creator | potential_email | profile_link | profile_photo |
| ---------------- | -------------- | ---------- | --------- | ------------------------------- | --- | ------------------------------- | --------- | ----------- | ------- | ------------- | ------------- | ---------------------------------- | ------------------------- | -------- | ---------- | ---------- | ------------- | ------- | ------- | ------------------------------------------------ | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| javiersierra2102 | Javier Sierra | Javier | Sierra | London, England, United Kingdom | 39 | Software Engineer | 735 | 725 | OpenAI | Meta | Oculus VR | Hult International Business School | Universidad Simón Bolívar | Java | JavaScript | C++ | FALSE | FALSE | FALSE | javier.sierra@openai.com, jsierra@openai.com | https://www.linkedin.com/in/javiersierra2102 | https://media.licdn.com/dms/image/C4D03AQHEyUg1kGT08Q/profile-displayphoto-shrink_800_800/0/1516504680512?e=1727913600&v=beta&t=3enCmNDBtJ7LxfbW6j1hDD8qNtHjO2jb2XTONECxUXw |
| dougli | Douglas Li | Douglas | Li | London, England, United Kingdom | 37 | @ OpenAI UK, previously at Meta | 583 | 401 | OpenAI | Shift Lab | Facebook | Washington University in St. Louis | | Java | Python | JavaScript | FALSE | TRUE | FALSE | douglas.li@openai.com, dli@openai.com | https://www.linkedin.com/in/dougli | https://media.licdn.com/dms/image/D4E03AQETmRyb3_GB8A/profile-displayphoto-shrink_800_800/0/1687996628597?e=1727913600&v=beta&t=HRYGJ4RxsTMcPF1YcSikXlbz99hx353csho3PWT6fOQ |
| nkartashov | Nick Kartashov | Nick | Kartashov | London, England, United Kingdom | 33 | Software Engineer | 2186 | 2182 | OpenAI | Google | DeepMind | St. Petersburg Academic University | Bioinformatics Institute | Teamwork | Java | Haskell | FALSE | FALSE | FALSE | nick.kartashov@openai.com, nkartashov@openai.com | https://www.linkedin.com/in/nkartashov | https://media.licdn.com/dms/image/D4E03AQEjOKxC5UgwWw/profile-displayphoto-shrink_800_800/0/1680706122689?e=1727913600&v=beta&t=m-JnG9nm0zxp1Z7njnInwbCoXyqa3AN-vJZntLfbzQ4 |
### Parameters for `LinkedInAccount()`
```plaintext
Optional
├── session_file (str):
| file path to save session cookies, so only one manual login is needed.
| can use mult profiles this way
|
| For automated login
├── username (str):
| linkedin account email
│
├── password (str):
| linkedin account password
|
├── driver_type (DriverType):
| signs in with the given BrowserType (Chrome, Firefox) and executable_path
|
├── solver_service (SolverType):
| solves the captcha using the desired service - either CapSolver, or 2Captcha (worse of the two)
|
├── solver_api_key (str):
| api key for the solver provider
│
├── log_level (int):
| Controls the verbosity of the runtime printouts
| (0 prints only errors, 1 is info, 2 is all logs. Default is 0.)
```
### Parameters for `scrape_staff()`
```plaintext
Optional
├── company_name (str):
| company identifier on linkedin, will search for that company if that company id does not exist
| e.g. openai from https://www.linkedin.com/company/openai
|
├── search_term (str):
| staff title to search for
| e.g. software engineer
|
├── location (str):
| location the staff resides
| e.g. london
│
├── extra_profile_data (bool)
| fetches educations, experiences, skills, certifications (Default false)
│
├── max_results (int):
| number of staff to fetch, default/max is 1000 for a search imposed by LinkedIn
|
├── block (bool):
| whether to block the user after scraping
|
├── connect (bool):
| whether to conncet with the user after scraping
```
### Parameters for `scrape_users()`
```plaintext
├── user_ids (list):
| user ids to scrape from
| e.g. dougmcmillon from https://www.linkedin.com/in/dougmcmillon
|
├── block (bool):
| whether to block the user after scraping
|
├── connect (bool):
| whether to conncet with the user after scraping
```
### Parameters for `scrape_comments()`
```plaintext
├── post_ids (list):
| post ids to scrape from
| e.g. 7252381444906364929 from https://www.linkedin.com/posts/williamhgates_technology-transformtheeveryday-activity-7252381444906364929-Bkls
```
### Parameters for `scrape_companies()`
```plaintext
├── company_names (list):
| list of company names to scrape details from
| e.g. ['openai', 'microsoft', 'google']
```
### Parameters for `scrape_connections()`
```plaintext
├── max_results (int):
| maximum number of connections to fetch
|
├── extra_profile_data (bool):
| fetches educations, experiences, skills, certifications & contact info for each connection (Default false)
```
### LinkedIn notes
- only 1000 max results per search
- extra_profile_data increases runtime by O(n)
- if rate limited, the program will stop scraping
- if using non-browser sign in, turn off 2fa
---
## Frequently Asked Questions
---
**Q: Can I get my account banned?**
**A:** It is a possibility, although there are no recorded incidents. Let me know if you are the first. However, to protect you, the code does not allow you to run it if LinkedIn is blocking you
---
**Q: Scraped 999 staff members, with 869 hidden LinkedIn Members?**
**A:** It means your LinkedIn account is bad. Not sure how they classify it but unverified email, new account, low connections and a bunch of factors go into it.
---
**Q: How to get around the 1000 search limit result?**
**A:** Check the examples folder. We can block the user after searching and try many different locations and search terms to maximize results.
---
**Q: Exception: driver not found for selenium?**
**A:** You need chromedriver installed (not the chrome): https://googlechromelabs.github.io/chrome-for-testing/#stable
---
**Q: Encountering issues with your queries?**
**A:** If problems
persist, [submit an issue](https://github.com/cullenwatson/StaffSpy/issues).
### Staff Schema
```plaintext
Staff
├── Personal Information
│ ├── search_term
│ ├── id
│ ├── name
│ ├── first_name
│ ├── last_name
│ ├── location
│ └── bio
│
├── Professional Details
│ ├── position
│ ├── profile_id
│ ├── profile_link
│ ├── potential_emails
│ └── estimated_age
│
├── Social Connectivity
│ ├── followers
│ ├── connections
│ └── mutuals_count
│
├── Status
│ ├── influencer
│ ├── creator
│ ├── premium
│ ├── open_to_work
│ ├── is_hiring
│ └── is_connection
│
├── Visuals
│ ├── profile_photo
│ └── banner_photo
│
├── Skills
│ ├── name
│ └── endorsements
│
├── Experiences
│ ├── from_date
│ ├── to_date
│ ├── duration
│ ├── title
│ ├── company
│ ├── location
│ └── emp_type
│
├── Certifications
│ ├── title
│ ├── issuer
│ ├── date_issued
│ ├── cert_id
│ └── cert_link
│
├── Educational Background
| ├── years
| ├── school
| └── degree
│
└── Connection Info (only when a connection and enabled on their profile)
├── email_address
├── address
├── birthday
├── websites
├── phone_numbers
└── created_at
```
Raw data
{
"_id": null,
"home_page": null,
"name": "staffspy",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.10",
"maintainer_email": null,
"keywords": null,
"author": "Cullen Watson",
"author_email": "cullen@cullenwatson.com",
"download_url": "https://files.pythonhosted.org/packages/66/61/17c9ef1c46e620b9d91d3733fcaa7f1731cc7bb2b1b7b27cdfdd3304f02b/staffspy-0.2.25.tar.gz",
"platform": null,
"description": "<img width=\"640\" alt=\"3FAD4652-488F-4F6F-A744-4C2AA5855E92\" src=\"https://github.com/user-attachments/assets/73b701ff-2db8-4d72-9ad3-42b7e1db537f\">\n\n**StaffSpy** is a staff scraper library for LinkedIn.\n\n_why pay $100/mo for LSN when you could do it for free and get a nice csv to go along with it?_\n\n## Features\n\n- Scrapes staff from a company on **LinkedIn**\n- Obtains skills, experiences, certifications & more\n- Fetch individuals users / comments on posts\n- Export all your connections with their contact info\n- Aggregates the employees in a Pandas DataFrame\n\n[Video Guide for StaffSpy](https://youtu.be/DNFmjvpZBTs) - _updated for release v0.2.18_\n\n### Installation\n\n```\npip install -U staffspy[browser]\n```\n\n_Python version >= [3.10](https://www.python.org/downloads/release/python-3100/) required_\n\n### Usage\n\n```python\nfrom staffspy import LinkedInAccount, SolverType, DriverType, BrowserType\n\naccount = LinkedInAccount(\n # driver_type=DriverType( # if issues with webdriver, specify its exact location, download link in the FAQ\n # browser_type=BrowserType.CHROME,\n # executable_path=\"/Users/pc/chromedriver-mac-arm64/chromedriver\"\n # ),\n session_file=\"session.pkl\", # save login cookies to only log in once (lasts a week or so)\n log_level=1, # 0 for no logs\n)\n\n# search by company\nstaff = account.scrape_staff(\n company_name=\"openai\",\n search_term=\"software engineer\",\n location=\"london\",\n extra_profile_data=True, # fetch all past experiences, schools, & skills\n max_results=50, # can go up to 1000\n # block=True # if you want to block the user after scraping, to exclude from future search results\n # connect=True # if you want to connect with the users till you hit your limit\n)\n# or fetch by user ids\nusers = account.scrape_users(\n user_ids=['williamhgates', 'rbranson', 'jeffweiner08']\n # connect=True,\n # block=True\n)\n\n# fetch all comments on two of Bill Gates' posts \ncomments = account.scrape_comments(\n ['7252421958540091394','7253083989547048961']\n)\n\n# fetch company details\ncompanies = account.scrape_companies(\n company_names=['openai', 'microsoft']\n)\n\n# fetch connections (also gets their contact info if available)\nconnections = account.scrape_connections(\n extra_profile_data=True,\n max_results=50\n)\n\n# export any of the results to csv\nstaff.to_csv(\"staff.csv\", index=False)\n```\n\n#### Browser login\n\nIf you rather use a browser to log in, install the browser add-on to StaffSpy .\n\n`pip install staffspy[browser]`\n\nIf you do not pass the `username` & `password` params, then a browser will open to sign in to LinkedIn on the first sign-in. Press enter after signing in to begin scraping.\n\n### Output\n\n| profile_id | name | first_name | last_name | location | age | position | followers | connections | company | past_company1 | past_company2 | school1 | school2 | skill1 | skill2 | skill3 | is_connection | premium | creator | potential_email | profile_link | profile_photo |\n| ---------------- | -------------- | ---------- | --------- | ------------------------------- | --- | ------------------------------- | --------- | ----------- | ------- | ------------- | ------------- | ---------------------------------- | ------------------------- | -------- | ---------- | ---------- | ------------- | ------- | ------- | ------------------------------------------------ | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| javiersierra2102 | Javier Sierra | Javier | Sierra | London, England, United Kingdom | 39 | Software Engineer | 735 | 725 | OpenAI | Meta | Oculus VR | Hult International Business School | Universidad Sim\u00f3n Bol\u00edvar | Java | JavaScript | C++ | FALSE | FALSE | FALSE | javier.sierra@openai.com, jsierra@openai.com | https://www.linkedin.com/in/javiersierra2102 | https://media.licdn.com/dms/image/C4D03AQHEyUg1kGT08Q/profile-displayphoto-shrink_800_800/0/1516504680512?e=1727913600&v=beta&t=3enCmNDBtJ7LxfbW6j1hDD8qNtHjO2jb2XTONECxUXw |\n| dougli | Douglas Li | Douglas | Li | London, England, United Kingdom | 37 | @ OpenAI UK, previously at Meta | 583 | 401 | OpenAI | Shift Lab | Facebook | Washington University in St. Louis | | Java | Python | JavaScript | FALSE | TRUE | FALSE | douglas.li@openai.com, dli@openai.com | https://www.linkedin.com/in/dougli | https://media.licdn.com/dms/image/D4E03AQETmRyb3_GB8A/profile-displayphoto-shrink_800_800/0/1687996628597?e=1727913600&v=beta&t=HRYGJ4RxsTMcPF1YcSikXlbz99hx353csho3PWT6fOQ |\n| nkartashov | Nick Kartashov | Nick | Kartashov | London, England, United Kingdom | 33 | Software Engineer | 2186 | 2182 | OpenAI | Google | DeepMind | St. Petersburg Academic University | Bioinformatics Institute | Teamwork | Java | Haskell | FALSE | FALSE | FALSE | nick.kartashov@openai.com, nkartashov@openai.com | https://www.linkedin.com/in/nkartashov | https://media.licdn.com/dms/image/D4E03AQEjOKxC5UgwWw/profile-displayphoto-shrink_800_800/0/1680706122689?e=1727913600&v=beta&t=m-JnG9nm0zxp1Z7njnInwbCoXyqa3AN-vJZntLfbzQ4 |\n\n\n### Parameters for `LinkedInAccount()`\n\n```plaintext\nOptional\n\u251c\u2500\u2500 session_file (str):\n| file path to save session cookies, so only one manual login is needed.\n| can use mult profiles this way\n|\n| For automated login\n\u251c\u2500\u2500 username (str):\n| linkedin account email\n\u2502\n\u251c\u2500\u2500 password (str):\n| linkedin account password\n|\n\u251c\u2500\u2500 driver_type (DriverType):\n| signs in with the given BrowserType (Chrome, Firefox) and executable_path\n|\n\u251c\u2500\u2500 solver_service (SolverType):\n| solves the captcha using the desired service - either CapSolver, or 2Captcha (worse of the two)\n|\n\u251c\u2500\u2500 solver_api_key (str):\n| api key for the solver provider\n\u2502\n\u251c\u2500\u2500 log_level (int):\n| Controls the verbosity of the runtime printouts\n| (0 prints only errors, 1 is info, 2 is all logs. Default is 0.)\n```\n\n### Parameters for `scrape_staff()`\n\n```plaintext\nOptional\n\u251c\u2500\u2500 company_name (str):\n| company identifier on linkedin, will search for that company if that company id does not exist\n| e.g. openai from https://www.linkedin.com/company/openai\n|\n\u251c\u2500\u2500 search_term (str):\n| staff title to search for\n| e.g. software engineer\n|\n\u251c\u2500\u2500 location (str):\n| location the staff resides\n| e.g. london\n\u2502\n\u251c\u2500\u2500 extra_profile_data (bool)\n| fetches educations, experiences, skills, certifications (Default false)\n\u2502\n\u251c\u2500\u2500 max_results (int):\n| number of staff to fetch, default/max is 1000 for a search imposed by LinkedIn\n|\n\u251c\u2500\u2500 block (bool):\n| whether to block the user after scraping\n|\n\u251c\u2500\u2500 connect (bool):\n| whether to conncet with the user after scraping\n```\n\n### Parameters for `scrape_users()`\n\n```plaintext\n\u251c\u2500\u2500 user_ids (list):\n| user ids to scrape from\n| e.g. dougmcmillon from https://www.linkedin.com/in/dougmcmillon\n|\n\u251c\u2500\u2500 block (bool):\n| whether to block the user after scraping\n|\n\u251c\u2500\u2500 connect (bool):\n| whether to conncet with the user after scraping\n```\n\n\n### Parameters for `scrape_comments()`\n\n```plaintext\n\u251c\u2500\u2500 post_ids (list):\n| post ids to scrape from\n| e.g. 7252381444906364929 from https://www.linkedin.com/posts/williamhgates_technology-transformtheeveryday-activity-7252381444906364929-Bkls\n```\n\n\n### Parameters for `scrape_companies()`\n\n```plaintext\n\u251c\u2500\u2500 company_names (list):\n| list of company names to scrape details from\n| e.g. ['openai', 'microsoft', 'google']\n```\n\n\n### Parameters for `scrape_connections()`\n\n```plaintext\n\u251c\u2500\u2500 max_results (int):\n| maximum number of connections to fetch\n|\n\u251c\u2500\u2500 extra_profile_data (bool):\n| fetches educations, experiences, skills, certifications & contact info for each connection (Default false)\n```\n\n### LinkedIn notes\n\n - only 1000 max results per search\n - extra_profile_data increases runtime by O(n)\n - if rate limited, the program will stop scraping\n - if using non-browser sign in, turn off 2fa\n\n---\n\n## Frequently Asked Questions\n\n---\n\n**Q: Can I get my account banned?** \n**A:** It is a possibility, although there are no recorded incidents. Let me know if you are the first. However, to protect you, the code does not allow you to run it if LinkedIn is blocking you\n\n---\n\n**Q: Scraped 999 staff members, with 869 hidden LinkedIn Members?** \n**A:** It means your LinkedIn account is bad. Not sure how they classify it but unverified email, new account, low connections and a bunch of factors go into it.\n\n---\n\n**Q: How to get around the 1000 search limit result?** \n**A:** Check the examples folder. We can block the user after searching and try many different locations and search terms to maximize results.\n\n---\n\n**Q: Exception: driver not found for selenium?** \n**A:** You need chromedriver installed (not the chrome): https://googlechromelabs.github.io/chrome-for-testing/#stable\n\n---\n\n**Q: Encountering issues with your queries?** \n**A:** If problems\npersist, [submit an issue](https://github.com/cullenwatson/StaffSpy/issues).\n\n\n### Staff Schema\n\n```plaintext\nStaff\n\u251c\u2500\u2500 Personal Information\n\u2502 \u251c\u2500\u2500 search_term\n\u2502 \u251c\u2500\u2500 id\n\u2502 \u251c\u2500\u2500 name\n\u2502 \u251c\u2500\u2500 first_name\n\u2502 \u251c\u2500\u2500 last_name\n\u2502 \u251c\u2500\u2500 location\n\u2502 \u2514\u2500\u2500 bio\n\u2502\n\u251c\u2500\u2500 Professional Details\n\u2502 \u251c\u2500\u2500 position\n\u2502 \u251c\u2500\u2500 profile_id\n\u2502 \u251c\u2500\u2500 profile_link\n\u2502 \u251c\u2500\u2500 potential_emails\n\u2502 \u2514\u2500\u2500 estimated_age\n\u2502\n\u251c\u2500\u2500 Social Connectivity\n\u2502 \u251c\u2500\u2500 followers\n\u2502 \u251c\u2500\u2500 connections\n\u2502 \u2514\u2500\u2500 mutuals_count\n\u2502\n\u251c\u2500\u2500 Status\n\u2502 \u251c\u2500\u2500 influencer\n\u2502 \u251c\u2500\u2500 creator\n\u2502 \u251c\u2500\u2500 premium\n\u2502 \u251c\u2500\u2500 open_to_work\n\u2502 \u251c\u2500\u2500 is_hiring\n\u2502 \u2514\u2500\u2500 is_connection\n\u2502\n\u251c\u2500\u2500 Visuals\n\u2502 \u251c\u2500\u2500 profile_photo\n\u2502 \u2514\u2500\u2500 banner_photo\n\u2502\n\u251c\u2500\u2500 Skills\n\u2502 \u251c\u2500\u2500 name\n\u2502 \u2514\u2500\u2500 endorsements\n\u2502\n\u251c\u2500\u2500 Experiences\n\u2502 \u251c\u2500\u2500 from_date\n\u2502 \u251c\u2500\u2500 to_date\n\u2502 \u251c\u2500\u2500 duration\n\u2502 \u251c\u2500\u2500 title\n\u2502 \u251c\u2500\u2500 company\n\u2502 \u251c\u2500\u2500 location\n\u2502 \u2514\u2500\u2500 emp_type\n\u2502\n\u251c\u2500\u2500 Certifications\n\u2502 \u251c\u2500\u2500 title\n\u2502 \u251c\u2500\u2500 issuer\n\u2502 \u251c\u2500\u2500 date_issued\n\u2502 \u251c\u2500\u2500 cert_id\n\u2502 \u2514\u2500\u2500 cert_link\n\u2502\n\u251c\u2500\u2500 Educational Background\n| \u251c\u2500\u2500 years\n| \u251c\u2500\u2500 school\n| \u2514\u2500\u2500 degree\n\u2502\n\u2514\u2500\u2500 Connection Info (only when a connection and enabled on their profile)\n \u251c\u2500\u2500 email_address\n \u251c\u2500\u2500 address\n \u251c\u2500\u2500 birthday\n \u251c\u2500\u2500 websites\n \u251c\u2500\u2500 phone_numbers\n \u2514\u2500\u2500 created_at\n```\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Staff scraper library for LinkedIn",
"version": "0.2.25",
"project_urls": null,
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "73f161464eefcf361d0c91f5ffda9d3b4b968e88170a195d1ef7d0566c84aa28",
"md5": "b864adadf78a3fbbb743d5796de78652",
"sha256": "399c4805d3364a8f50da89f6fc71b07f7950f5f3f73461617c9bc4e833b13374"
},
"downloads": -1,
"filename": "staffspy-0.2.25-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b864adadf78a3fbbb743d5796de78652",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.10",
"size": 34946,
"upload_time": "2025-01-06T10:13:10",
"upload_time_iso_8601": "2025-01-06T10:13:10.637363Z",
"url": "https://files.pythonhosted.org/packages/73/f1/61464eefcf361d0c91f5ffda9d3b4b968e88170a195d1ef7d0566c84aa28/staffspy-0.2.25-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "666117c9ef1c46e620b9d91d3733fcaa7f1731cc7bb2b1b7b27cdfdd3304f02b",
"md5": "3c957a0ce3f996d84fda6203c162f1db",
"sha256": "0e6dffcdc18f051ea7e262bdeb487aebf53805149226bbd8cc58391ea3b67935"
},
"downloads": -1,
"filename": "staffspy-0.2.25.tar.gz",
"has_sig": false,
"md5_digest": "3c957a0ce3f996d84fda6203c162f1db",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.10",
"size": 28844,
"upload_time": "2025-01-06T10:13:12",
"upload_time_iso_8601": "2025-01-06T10:13:12.999184Z",
"url": "https://files.pythonhosted.org/packages/66/61/17c9ef1c46e620b9d91d3733fcaa7f1731cc7bb2b1b7b27cdfdd3304f02b/staffspy-0.2.25.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-06 10:13:12",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "staffspy"
}