Looking for a production-ready Instagram scraping API?
CoreClaw provides APIs and open-source Workers for Instagram posts, profiles, comments, and more, helping developers collect structured data at scale.
🎁 Start free → https://coreclaw.com
InstagramPostsScraper is a Python library for collect instagram users' data.
The data obtained by web crawlers is not real-time data, but rather data from a specific point in time on the same day.
I’d really appreciate your support! You can star ⭐ or fork this repository to help me keep sharing more interesting web scrapers.
If you enjoy this project and would like to support me, please consider donating 🙌
Your support will help me continue developing this project and working on other exciting ideas!
- PayPal: https://www.paypal.me/faustren1z
- Buy Me a Coffee: https://buymeacoffee.com/faustren1z
Thank you for your support!! 🎉
beautifulsoup4==4.13.4
cloudscraper==1.2.71
lxml==6.1.1
pandas==2.2.3
pytz==2024.2
requests==2.32.3
selenium==4.33.0
seleniumbase==4.39.2To install the latest release from PyPI:
pip install instagram-posts-scraperfrom instagram_posts_scraper.instagram_posts_scraper import InstaPeriodScraper
from IPython.display import display
ig_posts_scraper = InstaPeriodScraper()
target_info = {"username": "stephencurry30", "days_limit": 30}
res = ig_posts_scraper.get_posts(target_info=target_info)
display(res)- username: target instagram user
- days_limit: Number of days within which to scrape posts..
You can check the installed version and module documentation:
import instagram_posts_scraper
print(instagram_posts_scraper.__version__) # e.g. 0.2.0
print(instagram_posts_scraper.__doc__) # module documentationThe scraper returns a single consolidated dictionary containing the target's
normalized profile, the account_status, the scraping timestamp
(updated_at), a posts list of normalized posts, plus the raw init_posts
(picnob first-page HTML posts) and top_posts (profile-scraper highlights)
collections, which are preserved verbatim so no source data is lost.
Profile metadata is normalized: followers comes from the profile scraper's
precise count, while following and the biography fallback come from picnob.
Each entry in posts is normalized to a single, consistent engagement shape
(like_count / comment_count as integers). init_posts and top_posts keep
their original shapes untouched.
Below is an abbreviated example (long media URLs are truncated with ... for readability).
For the complete, real output see
examples/example_output.json.
{ "profile": { "username": "stephencurry30", "userid": "324599988", "full_name": "Wardell Curry", "biography": "Believer. Husband. Father. Founder. Philanthropist. Olympic Gold Medalist. NYT Best Selling Author. Philippians 4:13.", "followers": 57049215, "following": 1296, "posts_count": 1556, "profile_picture": "https://cdn.iqsaved.com/..." }, "account_status": "public", "updated_at": "2026-08-21 15:28:13.009746+08:00", "posts": [ { "shortcode": "6772442523573164715722", "caption": "Played a lil G with my boy @stephencurry30 this week to kick off Father’s Day weekend! ...", "media_type": "igtv", "is_video": true, "timestamp": 1781966678, "like_count": 98397, "comment_count": 540, "thumbnail": "https://scontent-ord5-1.cdninstagram.com/...", "image_url": "https://scontent.cdninstagram.com/..." } // ... more posts ], "init_posts": [ { "text": "Quality time looks a little different in our family ...", "likes": "101k", "comments": "425", "time": "7 days ago", "thumbnail": "https://sp1.pixnoy.com/..." } // ... picnob first-page posts, preserved verbatim (now includes the cover `thumbnail`) ], "top_posts": [ { "timestamp": 1786636718, "caption": "Quality time looks a little different in our family 😂 ...", "comment_count": 425, "like_count": 100894, "shortcode": "Db_GagbB20Q" } // ... profile-scraper highlights, preserved verbatim ] }