@scrapecreators/cli 1.0.27 → 1.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,7 +9,7 @@ export const instagramBaseApis = {
9
9
  description:
10
10
  "Gets public Instagram profile data, recent posts, and related accounts",
11
11
  fullDescription:
12
- "Retrieves comprehensive public Instagram profile information including biography, bio links, follower and following counts, verification status, and profile picture URLs. Also returns recent timeline posts with engagement metrics such as likes, comments, and video view counts, plus a list of related profiles. Useful for account overview, audience analysis, or discovering similar creators.",
12
+ "Retrieves comprehensive public Instagram profile information including biography, bio links, follower and following counts, verification status, and profile picture URLs. Also returns recent timeline posts with engagement metrics such as likes, comments, and video view counts, plus a list of related profiles. Useful for account overview, audience analysis, or discovering similar creators. Instagram may return media_count as null or return only the current post batch in edge_owner_to_timeline_media.count. Use Profile Post Count when you specifically need the total number of posts.",
13
13
  path: "/v1/instagram/profile",
14
14
  responseFields: [
15
15
  {
@@ -574,12 +574,20 @@ export const instagramBaseApis = {
574
574
  {
575
575
  name: "Posts",
576
576
  method: "GET",
577
- description: "Get a persons public posts. *Play counts can sometimes be inaccurate* Play counts are Instagram-only. When a Reel is also cross-posted to Facebook, Instagram (behind login) shows you the combined IG + FB views. But this API will only return the Instagram views. [Read about it on Reddit](https://www.reddit.com/r/InstagramMarketing/comments/1cu2dge/whats_the_point_of_having_facebook_views_on/)",
577
+ description: "Get a persons public posts (which includes reels). The published time is returned in `items[].created_at` as an ISO 8601 UTC date. The original Unix timestamp is still available in `items[].taken_at`. *Play counts can sometimes be inaccurate* Play counts are Instagram-only. When a Reel is also cross-posted to Facebook, Instagram (behind login) shows you the combined IG + FB views. But this API will only return the Instagram views. [Read about it on Reddit](https://www.reddit.com/r/InstagramMarketing/comments/1cu2dge/whats_the_point_of_having_facebook_views_on/)",
578
578
  fullDescription:
579
- "Returns a paginated feed of a user's public Instagram posts, including photos, videos, and carousels. Each item includes media type, shortcode, caption text, like count, comment count, play count, video URLs, image URLs, and tagged users. Play counts reflect Instagram-only views and exclude cross-posted Facebook views. Supports cursor-based pagination via next_max_id for scrolling through the full timeline.",
579
+ "Returns a paginated feed of a user's public Instagram posts, including reels, photos, videos, and carousels. Each item includes media type, shortcode, caption text, like count, comment count, play count, video URLs, image URLs, tagged users, and the published time in `items[].created_at` as an ISO 8601 UTC date. The original Unix timestamp remains available in `items[].taken_at`. Play counts reflect Instagram-only views and exclude cross-posted Facebook views. Supports cursor-based pagination via next_max_id for scrolling through the full timeline.",
580
580
  path: "/v2/instagram/user/posts",
581
581
  paginationField: "next_max_id",
582
582
  responseFields: [
583
+ {
584
+ path: "items[0].created_at",
585
+ description: "Human-readable published time in ISO 8601 UTC format.",
586
+ },
587
+ {
588
+ path: "items[0].taken_at",
589
+ description: "Original published time as a Unix timestamp in seconds.",
590
+ },
583
591
  {
584
592
  path: "items[0].video_versions[0].url",
585
593
  description: "If the post is video, this is the URL of the video",
@@ -620,6 +628,7 @@ export const instagramBaseApis = {
620
628
  has_privately_liked: false,
621
629
  filter_type: 0,
622
630
  taken_at: 1743438570,
631
+ created_at: "2025-03-31T16:29:30.000Z",
623
632
  usertags: {
624
633
  in: [
625
634
  {
@@ -1373,13 +1382,64 @@ export const instagramBaseApis = {
1373
1382
  },
1374
1383
  ],
1375
1384
  },
1385
+ {
1386
+ name: "User Tagged Posts",
1387
+ method: "GET",
1388
+ description: "Get public Instagram posts that a user is tagged in.",
1389
+ fullDescription:
1390
+ "Returns up to 10 public posts per page from an Instagram user's Tagged tab. Each item is a flat post object with its shortcode, caption, media type, engagement counts, media URLs, and owner details. Keep passing the returned cursor to fetch additional pages until has_more is false.",
1391
+ path: "/v1/instagram/user/tagged-posts",
1392
+ paginationField: "cursor",
1393
+ params: [
1394
+ {
1395
+ name: "user_id",
1396
+ type: "string",
1397
+ required: true,
1398
+ description: "Numeric Instagram user ID.",
1399
+ placeholder: "325734299",
1400
+ },
1401
+ {
1402
+ name: "cursor",
1403
+ type: "string",
1404
+ required: false,
1405
+ description: "Cursor returned by the previous response.",
1406
+ placeholder: "3953374600788032611",
1407
+ },
1408
+ ],
1409
+ sampleResponse: {
1410
+ success: true,
1411
+ credits_remaining: 999,
1412
+ posts: [
1413
+ {
1414
+ pk: "3953402310668919030",
1415
+ code: "DbdTnSdoSD2",
1416
+ media_type: 1,
1417
+ caption: {
1418
+ pk: "18139631029604360",
1419
+ text: "You get the best of both worlds ig",
1420
+ },
1421
+ comment_count: 0,
1422
+ like_count: 3,
1423
+ view_count: null,
1424
+ user: {
1425
+ pk: "13320148665",
1426
+ id: "13320148665",
1427
+ username: "oceanecosplay",
1428
+ },
1429
+ url: "https://www.instagram.com/p/DbdTnSdoSD2/",
1430
+ },
1431
+ ],
1432
+ cursor: "3953374600788032611",
1433
+ has_more: true,
1434
+ },
1435
+ },
1376
1436
  {
1377
1437
  name: "Reels",
1378
1438
  method: "GET",
1379
1439
  description:
1380
- "Get all public reels from a profile. Can provide a user_id or handle, but for faster response times, use user_id. This won't include pinned reels right now. And I'm not sure why, but it looks like IG doesn't return the description of the reel on this endpoint :( You'll have to use the post detail endpoint to get that. *Play counts can sometimes be inaccurate* Play counts are Instagram-only. When a Reel is also cross-posted to Facebook, Instagram (behind login) shows you the combined IG + FB views. But this API will only return the Instagram views. [Read about it on Reddit](https://www.reddit.com/r/InstagramMarketing/comments/1cu2dge/whats_the_point_of_having_facebook_views_on/)",
1440
+ "Get all public reels from a profile. The published time is returned in `items[].media.created_at` as an ISO 8601 UTC date. With `trim=true`, use `items[].created_at`. The original Unix timestamp remains available as `taken_at`. Can provide a user_id or handle, but for faster response times, use user_id. This won't include pinned reels right now. And I'm not sure why, but it looks like IG doesn't return the description of the reel on this endpoint :( You'll have to use the post detail endpoint to get that. *Play counts can sometimes be inaccurate* Play counts are Instagram-only. When a Reel is also cross-posted to Facebook, Instagram (behind login) shows you the combined IG + FB views. But this API will only return the Instagram views. [Read about it on Reddit](https://www.reddit.com/r/InstagramMarketing/comments/1cu2dge/whats_the_point_of_having_facebook_views_on/)",
1381
1441
  fullDescription:
1382
- "Returns a paginated list of a user's public Instagram reels (short-form videos). Each reel includes its shortcode, play count, like count, comment count, video versions with download URLs, thumbnail image, and owner info. Note that reel captions are not returned by this endpoint. Play counts are Instagram-only views and exclude cross-posted Facebook views. Supports cursor-based pagination via max_id; providing a user_id instead of a handle yields faster responses.",
1442
+ "Returns a paginated list of a user's public Instagram reels (short-form videos). Each reel includes its shortcode, play count, like count, comment count, video versions with download URLs, thumbnail image, owner info, and the published time in `items[].media.created_at` as an ISO 8601 UTC date. With `trim=true`, use `items[].created_at`. The original Unix timestamp remains available as `taken_at`. Note that reel captions are not returned by this endpoint. Play counts are Instagram-only views and exclude cross-posted Facebook views. Supports cursor-based pagination via max_id; providing a user_id instead of a handle yields faster responses.",
1383
1443
  path: "/v1/instagram/user/reels",
1384
1444
  paginationField: "max_id",
1385
1445
  sampleResponse: {
@@ -1387,6 +1447,7 @@ export const instagramBaseApis = {
1387
1447
  {
1388
1448
  media: {
1389
1449
  taken_at: 1736294201,
1450
+ created_at: "2025-01-07T23:56:41.000Z",
1390
1451
  pk: "3540614075954356349",
1391
1452
  id: "3540614075954356349_2700692569",
1392
1453
  fbid: "17882057793200056",
@@ -1744,6 +1805,7 @@ export const instagramBaseApis = {
1744
1805
  id: "3641924023820356866_21393171",
1745
1806
  code: "DKKtpqaxg0C",
1746
1807
  taken_at: 1748371310,
1808
+ created_at: "2025-05-27T18:41:50.000Z",
1747
1809
  caption: {
1748
1810
  bit_flags: 0,
1749
1811
  created_at: 1748371312,
@@ -1979,6 +2041,16 @@ export const instagramBaseApis = {
1979
2041
  "QVFEWFlDdGNOamdwbVdNM2pLY1NJRndSZ2tCbWp6WDV0TWxaYl9WNVktZU1BTUxWMlg1c2JFenNDanJVZ2NudWFjR28zRG93a3ByTExXaHJMbTA0aVJBZg==",
1980
2042
  },
1981
2043
  responseFields: [
2044
+ {
2045
+ path: "items[0].media.created_at",
2046
+ description:
2047
+ "Human-readable published time in ISO 8601 UTC format. With trim=true, use items[0].created_at.",
2048
+ },
2049
+ {
2050
+ path: "items[0].media.taken_at",
2051
+ description:
2052
+ "Original published time as a Unix timestamp in seconds. With trim=true, use items[0].taken_at.",
2053
+ },
1982
2054
  {
1983
2055
  path: "items[0].media.play_count",
1984
2056
  description: "This is views for the reel.",
@@ -2027,18 +2099,26 @@ export const instagramBaseApis = {
2027
2099
  name: "Post/Reel Info",
2028
2100
  method: "GET",
2029
2101
  description:
2030
- "Retrieve public post/reel details. *Play counts can sometimes be inaccurate* Play counts are Instagram-only. When a Reel is also cross-posted to Facebook, Instagram (behind login) shows you the combined IG + FB views. But this API will only return the Instagram views. [Read about it on Reddit](https://www.reddit.com/r/InstagramMarketing/comments/1cu2dge/whats_the_point_of_having_facebook_views_on/)",
2102
+ "Retrieve public post/reel details. The published time is returned in `data.xdt_shortcode_media.created_at` as an ISO 8601 UTC date. The original Unix timestamp remains available in `data.xdt_shortcode_media.taken_at_timestamp`. *Play counts can sometimes be inaccurate* Play counts are Instagram-only. When a Reel is also cross-posted to Facebook, Instagram (behind login) shows you the combined IG + FB views. But this API will only return the Instagram views. [Read about it on Reddit](https://www.reddit.com/r/InstagramMarketing/comments/1cu2dge/whats_the_point_of_having_facebook_views_on/)",
2031
2103
  fullDescription:
2032
- "Fetches detailed metadata for a single Instagram post or reel by shortcode or URL. Returns caption text, like count, comment count, video URL, video play count, video duration, display images, owner info, tagged users, and carousel sidecar children when applicable. Play counts are Instagram-only views and exclude cross-posted Facebook views.",
2104
+ "Fetches detailed metadata for a single Instagram post or reel by shortcode or URL. Returns caption text, like count, comment count, video URL, video play count, video duration, display images, owner info, tagged users, carousel sidecar children when applicable, and the published time in `data.xdt_shortcode_media.created_at` as an ISO 8601 UTC date. The original Unix timestamp remains available in `data.xdt_shortcode_media.taken_at_timestamp`. Play counts are Instagram-only views and exclude cross-posted Facebook views. Set `include_play_count=false` to omit the play count and skip its additional fetch for a faster response.",
2033
2105
  path: "/v1/instagram/post",
2034
2106
  responseFields: [
2107
+ {
2108
+ path: "data.xdt_shortcode_media.created_at",
2109
+ description: "Human-readable published time in ISO 8601 UTC format.",
2110
+ },
2111
+ {
2112
+ path: "data.xdt_shortcode_media.taken_at_timestamp",
2113
+ description: "Original published time as a Unix timestamp in seconds.",
2114
+ },
2035
2115
  {
2036
2116
  path: "data.xdt_shortcode_media.video_url",
2037
2117
  description: "If the post is video, this is the URL of the video",
2038
2118
  },
2039
2119
  {
2040
2120
  path: "data.xdt_shortcode_media.video_play_count",
2041
- description: "Views (only for reels)",
2121
+ description: "Views (only for reels). Omitted when `include_play_count=false`.",
2042
2122
  },
2043
2123
  {
2044
2124
  path: "data.xdt_shortcode_media.edge_media_preview_like.count",
@@ -2211,6 +2291,7 @@ export const instagramBaseApis = {
2211
2291
  },
2212
2292
  comments_disabled: false,
2213
2293
  commenting_disabled_for_viewer: false,
2294
+ created_at: "2025-02-10T18:00:35.000Z",
2214
2295
  taken_at_timestamp: 1739210435,
2215
2296
  edge_media_preview_like: { count: 153, edges: [] },
2216
2297
  edge_media_to_sponsor_user: { edges: [] },
@@ -2641,6 +2722,13 @@ export const instagramBaseApis = {
2641
2722
  placeholder: false,
2642
2723
  credits: 10,
2643
2724
  },
2725
+ {
2726
+ name: "include_play_count",
2727
+ type: "boolean",
2728
+ required: false,
2729
+ description: "Set to false to omit `video_play_count` and skip its additional fetch for a faster response. Defaults to true.",
2730
+ placeholder: true,
2731
+ },
2644
2732
  ],
2645
2733
  },
2646
2734
  {
@@ -3385,13 +3473,137 @@ export const instagramBaseApis = {
3385
3473
  // ],
3386
3474
  // },
3387
3475
  // },
3476
+ {
3477
+ name: "Search Instagram",
3478
+ method: "GET",
3479
+ description:
3480
+ "Find users, hashtags, and places with Instagram's native search. Use this for account or entity lookup; it returns one page and does not return posts.",
3481
+ fullDescription:
3482
+ "Use this for Instagram-native account, hashtag, or place lookup. It returns ranked users, hashtags, places, and keyword suggestions from Instagram itself. It is not Google-indexed, does not require an Instagram login, returns one page only, and does not return posts. For an Instagram-curated topic page with posts, use /v1/instagram/search/popular. For broader profile discovery from Google-indexed bios and captions, use /v1/instagram/search/profiles.",
3483
+ path: "/v1/instagram/search",
3484
+ params: [
3485
+ {
3486
+ name: "query",
3487
+ type: "string",
3488
+ required: true,
3489
+ description: "The username, hashtag, place, or keyword to search for.",
3490
+ placeholder: "nike",
3491
+ },
3492
+ ],
3493
+ sampleResponse: {
3494
+ success: true,
3495
+ credits_remaining: 100,
3496
+ data: {
3497
+ query: "nike",
3498
+ users: [
3499
+ {
3500
+ position: 0,
3501
+ id: "13460080",
3502
+ username: "nike",
3503
+ full_name: "Nike",
3504
+ is_verified: true,
3505
+ profile_pic_url: "https://instagram.example.com/nike.jpg",
3506
+ },
3507
+ ],
3508
+ hashtags: [
3509
+ {
3510
+ position: 2,
3511
+ id: "17841562978125529",
3512
+ name: "nikewomen",
3513
+ media_count: 2036828,
3514
+ search_result_subtitle: null,
3515
+ },
3516
+ ],
3517
+ places: [
3518
+ {
3519
+ position: 51,
3520
+ id: "715603272",
3521
+ name: "Nike",
3522
+ title: "Nike",
3523
+ subtitle: "",
3524
+ facebook_places_id: "106068296090172",
3525
+ },
3526
+ ],
3527
+ keywords: [],
3528
+ rank_token: "a6e9cded-6c3e-41be-a6b1-9fa5295a30d5",
3529
+ },
3530
+ },
3531
+ },
3532
+ {
3533
+ name: "Popular Search",
3534
+ method: "GET",
3535
+ description:
3536
+ "Explore an Instagram topic and its curated posts. Use this when you want the Popular page's generated description, sources, suggested terms, media count, and paginated posts.",
3537
+ fullDescription:
3538
+ "Use this to explore an Instagram topic and the posts Instagram curates for it. It scrapes the public /popular/{query} page without requiring an Instagram login. The first page returns the topic title, numeric total media count, Instagram's generated description and sources, suggested terms, posts, and an opaque cursor. Pass that cursor with the same query to fetch more posts. Later pages return query, posts, cursor, and has_more only. For an exact hashtag through Google-indexed results, use /v1/instagram/search/hashtag. For reels only, use /v2/instagram/reels/search. Each successful request costs 1 credit.",
3539
+ path: "/v1/instagram/search/popular",
3540
+ params: [
3541
+ {
3542
+ name: "query",
3543
+ type: "string",
3544
+ required: true,
3545
+ description: "The Popular topic to search for.",
3546
+ placeholder: "basketball",
3547
+ },
3548
+ {
3549
+ name: "cursor",
3550
+ type: "string",
3551
+ required: false,
3552
+ description:
3553
+ "The opaque cursor returned by the previous response. Use it with the same query to fetch the next page of posts.",
3554
+ placeholder: "opaque-cursor-from-response",
3555
+ },
3556
+ ],
3557
+ sampleResponse: {
3558
+ success: true,
3559
+ credits_remaining: 99,
3560
+ credits_charged: 1,
3561
+ query: "basketball",
3562
+ title: "Basketball",
3563
+ total_media_count: 8800000,
3564
+ description: {
3565
+ plain_text:
3566
+ "James Naismith invented basketball in December 1891 in Springfield, Massachusetts as an indoor winter activity.",
3567
+ source_uris: [
3568
+ "https://en.wikipedia.org/wiki/Outline_of_basketball",
3569
+ ],
3570
+ linked_terms: [],
3571
+ },
3572
+ suggested_terms: [
3573
+ "the tallest basketball player",
3574
+ "thats my man basketball",
3575
+ "jason williams basketball player",
3576
+ ],
3577
+ posts: [
3578
+ {
3579
+ id: "POLARIS_3892957342260916992",
3580
+ shortcode: "DYGkBO3NfMA",
3581
+ url: "https://www.instagram.com/reel/DYGkBO3NfMA/",
3582
+ type: "reel",
3583
+ caption: "😂😂 #meta #pov #hooper #basketball",
3584
+ display_url: "https://instagram.example.com/basketball-cover.jpg",
3585
+ video_url: "https://instagram.example.com/basketball-video.mp4",
3586
+ play_count: 11993988,
3587
+ owner: {
3588
+ id: "17841409679275910",
3589
+ username: "lukaceo",
3590
+ is_verified: false,
3591
+ profile_pic_url:
3592
+ "https://instagram.example.com/lukaceo-profile.jpg",
3593
+ },
3594
+ },
3595
+ ],
3596
+ cursor: "opaque-cursor-from-response",
3597
+ has_more: true,
3598
+ },
3599
+ },
3388
3600
  {
3389
3601
  name: "Search Hashtag Posts",
3390
3602
  method: "GET",
3391
3603
  description:
3392
- "Search for public Instagram posts by hashtag. Uses Google Search to find indexed posts/reels, then scrapes the public Instagram pages. This avoids Instagram login-gated search and only uses public data.",
3604
+ "Find Google-indexed public Instagram posts for an exact hashtag. Use this when you know the hashtag and want date filters or pagination.",
3393
3605
  fullDescription:
3394
- "Finds public Instagram posts for a hashtag using Google Search, then returns post details such as caption, play count when available, like count, comment count, owner, and post time. Results depend on what Google has indexed, so this is best-effort and not a complete Instagram-native hashtag search. Pass media_type=reels if you only want reels. Use date_posted for recent posts and pass the returned cursor to fetch the next page.",
3606
+ "Use this when you know the exact hashtag and want Google-indexed public Instagram posts or reels, optional date filters, and pagination. It returns post details such as caption, engagement, owner, and post time. Results are best-effort and not a complete Instagram-native hashtag feed. For an Instagram-curated topic page with generated context and suggested terms, use /v1/instagram/search/popular. Pass media_type=reels to only return reels. Cursors are limited to pages 1 through 11; cursor 12 or greater returns a 400 response.",
3395
3607
  path: "/v1/instagram/search/hashtag",
3396
3608
  params: [
3397
3609
  {
@@ -3421,7 +3633,7 @@ export const instagramBaseApis = {
3421
3633
  name: "cursor",
3422
3634
  type: "string",
3423
3635
  required: false,
3424
- description: "The cursor returned by the previous response. In this version, it is the next Google results page number.",
3636
+ description: "The cursor returned by the previous response. It is the next Google results page number and cannot exceed 11; cursor 12 or greater returns a 400 response.",
3425
3637
  placeholder: "2",
3426
3638
  },
3427
3639
  ],
@@ -3442,8 +3654,6 @@ export const instagramBaseApis = {
3442
3654
  "video_url": "https://scontent-ord5-2.cdninstagram.com/o1/v/t2/f2/m86/AQNG_gCzevxl8xiNB2lVRlcV8c3o3r2ZyeLeWfaY4eaHdyRX3_Z1mty2jrHuH5Z66vTC5SXrhmpdG5re9MNyf1jCtWVyPKAWQFQ037o.mp4?_nc_cat=104&_nc_sid=5e9851&_nc_ht=scontent-ord5-2.cdninstagram.com&_nc_ohc=ByTiQjuOr9wQ7kNvwGpBh0x&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTEyMDQ3OTIyMDA0MTUwMSwiYXNzZXRfYWdlX2RheXMiOjI2NCwidmlfdXNlY2FzZV9pZCI6MTAwOTksImR1cmF0aW9uX3MiOjY1LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=638842146c84456b&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC80QTQ2OURBNUJBQTE1RjdFODZFRjQxRThCOUU1RTNBOV92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYRmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC83NDQ4NjQwMTg0MjI1MjdfODI5Mjc2OTQ2ODc2ODI3MDk4OC5tcDQVAgLIARIAKAAYABsCiAd1c2Vfb2lsATEScHJvZ3Jlc3NpdmVfcmVjaXBlATEVAAAmupyc3rzE_QMVAigCQzMsF0BQbul41P30GBJkYXNoX2Jhc2VsaW5lXzFfdjERAHX-B2XmnQEA&_nc_gid=tAUZdiRnIdGjcNvGfTjMvg&_nc_ss=7a22e&_nc_zt=28&oh=00_Af6Z6PbM9b2RWG7EdCufc8MOp-pcmhJu3EMKtd_pzJaopw&oe=6A193955",
3443
3655
  "has_audio": false,
3444
3656
  "accessibility_caption": null,
3445
- "video_view_count": 148581,
3446
- "video_play_count": 593055,
3447
3657
  "product_type": "clips",
3448
3658
  "video_duration": 65.733,
3449
3659
  "clips_music_attribution_info": {
@@ -3607,8 +3817,6 @@ export const instagramBaseApis = {
3607
3817
  "video_url": "https://scontent-mia3-3.cdninstagram.com/o1/v/t2/f2/m86/AQP-dJROb1RW6mt2HO6rqPKhUN-R0M9RSjgR90483nKJLqoM8VMl-0EDaym5Rs0T0lFFo4iSC5S5JroQMHi_LoU1Yh7MByctDUq2rHo.mp4?_nc_cat=109&_nc_sid=5e9851&_nc_ht=scontent-mia3-3.cdninstagram.com&_nc_ohc=jhHcKAQGJiwQ7kNvwGmCH4u&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTgwMjI3MjQ3NjI4MTg0NzQsImFzc2V0X2FnZV9kYXlzIjo0NywidmlfdXNlY2FzZV9pZCI6MTAwOTksImR1cmF0aW9uX3MiOjg1LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=e040d8d00e2dc40b&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC8wMzRDNzAxMEM2ODZDQUU1RUE4Q0JFMzJFRTEyMERBQl92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYUWlnX3hwdl9wbGFjZW1lbnRfcGVybWFuZW50X3YyL0YwNDIxOThBM0VBRDMzQTgxRDNGQzA2QUZCODNEQjhCX2F1ZGlvX2Rhc2hpbml0Lm1wNBUCAsgBEgAoABgAGwKIB3VzZV9vaWwBMRJwcm9ncmVzc2l2ZV9yZWNpcGUBMRUAACbU3vq10-SDQBUCKAJDMywXQFVZmZmZmZoYEmRhc2hfYmFzZWxpbmVfMV92MREAdf4HZeadAQA&_nc_gid=YD_Zc4FAN30v4fHL3lOgfw&_nc_ss=7a22e&_nc_zt=28&oh=00_Af4i9UTMzKBF1CWLsrCpPWFNBMny8wS91rv7XyzFvw24ng&oe=6A193ED6",
3608
3818
  "has_audio": true,
3609
3819
  "accessibility_caption": null,
3610
- "video_view_count": 770,
3611
- "video_play_count": 1650,
3612
3820
  "product_type": "clips",
3613
3821
  "video_duration": 85.419,
3614
3822
  "clips_music_attribution_info": {
@@ -3648,9 +3856,9 @@ export const instagramBaseApis = {
3648
3856
  name: "Search Instagram Profiles",
3649
3857
  method: "GET",
3650
3858
  description:
3651
- "Find Instagram profiles by keyword using Google-indexed public Instagram pages.",
3859
+ "Find profiles from Google-indexed bios and captions. Use this for broader creator discovery; use /v1/instagram/search for Instagram-native account lookup.",
3652
3860
  fullDescription:
3653
- "Searches Google for public Instagram results matching a keyword or phrase, then returns matching public profiles. Profile-page matches are marked matched_from=profile. Reel/post caption matches are enriched into the creator profile and marked matched_from=caption. This is best-effort and depends on what Google has indexed; it is not a complete native Instagram profile search.",
3861
+ "Use this for broad creator discovery from keywords found in Google-indexed Instagram profile pages, bios, and post captions. Profile-page matches are marked matched_from=profile; caption matches are enriched into the creator profile and marked matched_from=caption. This is best-effort and can paginate, but it is not Instagram-native or complete. For Instagram's own ranked account results, use /v1/instagram/search. Cursors are limited to pages 1 through 11; cursor 12 or greater returns a 400 response.",
3654
3862
  path: "/v1/instagram/search/profiles",
3655
3863
  params: [
3656
3864
  {
@@ -3664,7 +3872,7 @@ export const instagramBaseApis = {
3664
3872
  name: "cursor",
3665
3873
  type: "string",
3666
3874
  required: false,
3667
- description: "The cursor returned by the previous response. In this version, it is the next Google results page number.",
3875
+ description: "The cursor returned by the previous response. It is the next Google results page number and cannot exceed 11; cursor 12 or greater returns a 400 response.",
3668
3876
  placeholder: "2",
3669
3877
  },
3670
3878
  ],
@@ -3761,9 +3969,9 @@ export const instagramBaseApis = {
3761
3969
  name: "Search Reels",
3762
3970
  method: "GET",
3763
3971
  description:
3764
- "Search for reels by keyword. Uses Google Search to find reels. This is because IG puts search behind the login, and we only scrape public data",
3972
+ "Find Google-indexed Instagram reels by keyword. Use this when you only want reels and need date filters or pagination.",
3765
3973
  fullDescription:
3766
- "Searches for Instagram reels matching a keyword or phrase via Google Search, bypassing Instagram's login-gated search. Returns a list of reels with shortcode, caption, thumbnail, video URL, play count, like count, comment count, video duration, owner details, location, and audio attribution info. Play counts are Instagram-only views and exclude cross-posted Facebook views. Supports page-based pagination for browsing additional results.",
3974
+ "Use this when you only want Google-indexed Instagram reels matching a keyword or phrase, with optional date filters and pagination. It returns reel media, engagement, owner, location, and audio details. Results are best-effort rather than a complete Instagram-native search. For Instagram-curated topic posts, use /v1/instagram/search/popular. For an exact hashtag across posts and reels, use /v1/instagram/search/hashtag. Pages 1 through 11 are supported; page 12 or greater returns a 400 response.",
3767
3975
  path: "/v2/instagram/reels/search",
3768
3976
  params: [
3769
3977
  {
@@ -3777,15 +3985,15 @@ export const instagramBaseApis = {
3777
3985
  name: "date_posted",
3778
3986
  type: "select",
3779
3987
  required: false,
3780
- description: "Date posted",
3781
- options: ["last-hour", "last-day", "last-week", "last-month", "last-year"],
3782
- placeholder: "last-hour",
3988
+ description: "Google-indexed date window. Recent hour/day filters are not supported because Google does not index Instagram reels reliably enough in those windows.",
3989
+ options: ["last-week", "last-month", "last-year"],
3990
+ placeholder: "last-week",
3783
3991
  },
3784
3992
  {
3785
3993
  name: "page",
3786
3994
  type: "number",
3787
3995
  required: false,
3788
- description: "The page number to return.",
3996
+ description: "The page number to return. Must be between 1 and 11; page 12 or greater returns a 400 response.",
3789
3997
  placeholder: 1,
3790
3998
  },
3791
3999
  ],
@@ -3808,8 +4016,6 @@ export const instagramBaseApis = {
3808
4016
  "https://scontent-sjc3-1.cdninstagram.com/o1/v/t2/f2/m86/AQPtJA5EnMaKK-MNttf3RtYeQCVd-RvC7-juqeJiRkM3tKOkES_-1_ejsPDHgHGZ-xl4in8i3l38K12FlyUWKsieKzs2fGzo1GYOYJI.mp4?_nc_cat=105&_nc_sid=5e9851&_nc_ht=scontent-sjc3-1.cdninstagram.com&_nc_ohc=YBLRFw3fFXcQ7kNvwGKHSNS&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6Nzg4NjQ4MjQzNTUwNjIxLCJhc3NldF9hZ2VfZGF5cyI6MTA1LCJ2aV91c2VjYXNlX2lkIjoxMDA5OSwiZHVyYXRpb25fcyI6NzUsInVybGdlbl9zb3VyY2UiOiJ3d3cifQ%3D%3D&ccb=17-1&vs=8331fe48c9c9d742&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC85NjQ3MjM4QTg3QjMzMzVCNEVBNDI2NEUzRTIyRTNBRV92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYOnBhc3N0aHJvdWdoX2V2ZXJzdG9yZS9HRGFlcnlEbFRCTkhBbXdGQUk1d0lORGFpWEk3YnFfRUFBQUYVAgLIARIAKAAYABsCiAd1c2Vfb2lsATEScHJvZ3Jlc3NpdmVfcmVjaXBlATEVAAAmuubGpq_R5gIVAigCQzMsF0BS7MzMzMzNGBJkYXNoX2Jhc2VsaW5lXzFfdjERAHX-B2XmnQEA&_nc_gid=rIrCBBTCedpkbi2BFdOeJA&_nc_zt=28&oh=00_Afnoz52f0MquXCMwfTVoxg7ArrUBU0IM-BhI13EbDc8qKg&oe=695618AE",
3809
4017
  has_audio: false,
3810
4018
  accessibility_caption: null,
3811
- video_view_count: 21808,
3812
- video_play_count: 46018,
3813
4019
  product_type: "clips",
3814
4020
  video_duration: 75.7,
3815
4021
  clips_music_attribution_info: {
@@ -3982,8 +4188,6 @@ export const instagramBaseApis = {
3982
4188
  "https://instagram.fjau2-1.fna.fbcdn.net/o1/v/t2/f2/m86/AQMGznAPGhcSD2V0mwaf-FG2EZJ2y8OO0-NaXzzePzZsktazCSmUBKiRUMQwRCs4f3hajvZe9J0kqn6tMNEoZkqIa3_3VORgBKZTaFY.mp4?_nc_cat=103&_nc_oc=AdlOjWBrhYJ5_tH_G0NgrsGmMwladCYG_uKMlWZpc3XjffSG1-N1Ql8PB5bibwJ1ghM&_nc_sid=5e9851&_nc_ht=instagram.fjau2-1.fna.fbcdn.net&_nc_ohc=uji5XQuEMl4Q7kNvwHXgBf0&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNTc2LmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6NzA4OTMwMTEyMDExMDc2LCJhc3NldF9hZ2VfZGF5cyI6NywidmlfdXNlY2FzZV9pZCI6MTAwOTksImR1cmF0aW9uX3MiOjc3LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=c8400c88801d2050&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC9ENDQ2OEIwRjVCQUY0NjdFMkUxMkM5RjhERDdERTBBMV92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYOnBhc3N0aHJvdWdoX2V2ZXJzdG9yZS9HTlRSQXlUa2s5S3AxTThFQUh0NzhBU1gwZW9LYnN0VEFRQUYVAgLIARIAKAAYABsCiAd1c2Vfb2lsATEScHJvZ3Jlc3NpdmVfcmVjaXBlATEVAAAmiO3595SxwgIVAigCQzMsF0BTSp--dsi0GBJkYXNoX2Jhc2VsaW5lXzFfdjERAHX-B2XmnQEA&_nc_gid=aUx3RrOXcjBr2cA8SlA4sQ&_nc_zt=28&oh=00_AfmLbRxcBwEdb3HYqfUn-rjQvS8bP26kMKK5fRC9ePBVAQ&oe=69563678",
3983
4189
  has_audio: true,
3984
4190
  accessibility_caption: null,
3985
- video_view_count: 1437,
3986
- video_play_count: 2905,
3987
4191
  product_type: "clips",
3988
4192
  video_duration: 77.166,
3989
4193
  clips_music_attribution_info: {
@@ -4136,8 +4340,6 @@ export const instagramBaseApis = {
4136
4340
  "https://scontent-sjc6-1.cdninstagram.com/o1/v/t2/f2/m86/AQONqqxKabff9BZRO7uaH5BXwMh8BXSlRwnMcLRLe5oqcqYkeSKi0MxuMJ8HZRDkT2y36sOu5bmYPEg8-CczNflliC4uhmdf1gElZ8Y.mp4?_nc_cat=104&_nc_sid=5e9851&_nc_ht=scontent-sjc6-1.cdninstagram.com&_nc_ohc=3-ncb8NjkgEQ7kNvwHkyBCh&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5JTlNUQUdSQU0uQ0xJUFMuQzMuNzIwLmRhc2hfYmFzZWxpbmVfMV92MSIsInhwdl9hc3NldF9pZCI6MTkxNjY3MjEzNTc3ODE0MiwiYXNzZXRfYWdlX2RheXMiOjExNSwidmlfdXNlY2FzZV9pZCI6MTAwOTksImR1cmF0aW9uX3MiOjU5LCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=17-1&vs=49d2cb7a8533f053&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC9ERDQxQjIwMzUxMTg0RjAxNjI5NDQ2QTI5RUE5NTA4OF92aWRlb19kYXNoaW5pdC5tcDQVAALIARIAFQIYOnBhc3N0aHJvdWdoX2V2ZXJzdG9yZS9HRFRiWWlBai0yOXZXX0lEQUIzUkxUVTZwbnNaYnFfRUFBQUYVAgLIARIAKAAYABsCiAd1c2Vfb2lsATEScHJvZ3Jlc3NpdmVfcmVjaXBlATEVAAAmvL3unIDN5wYVAigCQzMsF0BNt2yLQ5WBGBJkYXNoX2Jhc2VsaW5lXzFfdjERAHX-B2XmnQEA&_nc_gid=K2ngcS-IqRjRHUvD236sDQ&_nc_zt=28&oh=00_Afny6XlXH8a5lIeV7vyIgobLzhbCJOd3KcMZ-DYexwOUyg&oe=69562279",
4137
4341
  has_audio: true,
4138
4342
  accessibility_caption: null,
4139
- video_view_count: 110684,
4140
- video_play_count: 271876,
4141
4343
  product_type: "clips",
4142
4344
  video_duration: 59.433,
4143
4345
  clips_music_attribution_info: {
@@ -5454,7 +5656,7 @@ export const instagramBaseApis = {
5454
5656
  method: "GET",
5455
5657
  description: "Get comments from an Instagram post or reel. Not gonna lie, this is one of our most error prone endpoints. You should expect ~90% success rate.",
5456
5658
  fullDescription:
5457
- "Retrieves comments on a public Instagram post or reel. Each comment includes the comment text, creation timestamp, and commenter details such as username, user ID, verification status, and profile picture URL. Supports cursor-based pagination to load additional comment pages.",
5659
+ "Retrieves comments on a public Instagram post or reel. Each comment includes the comment text, creation timestamp, reply count when Instagram provides it, and commenter details such as username, user ID, verification status, and profile picture URL. `child_comment_count` can be null when Instagram does not expose the count publicly. Set `include_replies=true` to fetch the first page of replies for every returned comment. This adds `replies`, `replies_cursor`, and `has_more_replies` to each comment. This option always costs 15 credits because Scrape Creators makes a separate Instagram replies request for every comment in the response. It is possible that no replies are returned, but you will still be charged 15 credits because those reply lookups were performed. This option is much slower than a normal comments request and may time out at 29 seconds. Supports cursor-based pagination to load additional comment pages.",
5458
5660
  path: "/v2/instagram/post/comments",
5459
5661
  params: [
5460
5662
  {
@@ -5472,16 +5674,30 @@ export const instagramBaseApis = {
5472
5674
  "The cursor to get more comments. Get 'cursor' from previous response.",
5473
5675
  placeholder: "eyJjYWNoZWRfY29tbWVud...",
5474
5676
  },
5677
+ {
5678
+ name: "include_replies",
5679
+ type: "boolean",
5680
+ required: false,
5681
+ description:
5682
+ "Set to true to include replies for every returned comment. This always costs 15 credits because each comment requires a separate Instagram replies request. You will still be charged 15 credits if no replies are returned. This is much slower and may time out at 29 seconds.",
5683
+ placeholder: "true",
5684
+ credits: 15,
5685
+ },
5475
5686
  ],
5476
5687
  sampleResponse: {
5477
5688
  success: true,
5478
5689
  credits_remaining: 33929114,
5690
+ credits_charged: 15,
5479
5691
  comments: [
5480
5692
  {
5481
5693
  id: "18051843701642870",
5482
5694
  text: '"...but who wants to know people who don\'t love animals anyway?". ❤️',
5483
5695
  created_at: "2025-09-16T17:03:04.000Z",
5484
5696
  "comment_like_count": 0,
5697
+ "child_comment_count": 0,
5698
+ replies: [],
5699
+ replies_cursor: null,
5700
+ has_more_replies: false,
5485
5701
  user: {
5486
5702
  is_verified: false,
5487
5703
  id: "46773599357",
@@ -5498,6 +5714,10 @@ export const instagramBaseApis = {
5498
5714
  text: "What a lovely lady, I'm with her who wants to know anyone who doesn't love animals ❤️👏",
5499
5715
  created_at: "2025-09-16T19:53:21.000Z",
5500
5716
  "comment_like_count": 0,
5717
+ "child_comment_count": 0,
5718
+ replies: [],
5719
+ replies_cursor: null,
5720
+ has_more_replies: false,
5501
5721
  user: {
5502
5722
  is_verified: false,
5503
5723
  id: "45139684051",
@@ -5513,6 +5733,61 @@ export const instagramBaseApis = {
5513
5733
  cursor: "AQHSpoi6HyDbzYRMzrD.........",
5514
5734
  },
5515
5735
  },
5736
+ {
5737
+ name: "Comment Replies",
5738
+ method: "GET",
5739
+ description: "Get replies to an Instagram comment.",
5740
+ fullDescription:
5741
+ "Retrieves the public replies to a specific Instagram comment. Pass the post or reel URL and the parent comment's `id` from the Comments endpoint. Returns reply text, timestamps, engagement counts, parent comment ID, and user details. Paginate with `cursor` when `has_more` is true.",
5742
+ path: "/v1/instagram/post/comment/replies",
5743
+ paginationField: "cursor",
5744
+ params: [
5745
+ {
5746
+ name: "url",
5747
+ type: "string",
5748
+ required: true,
5749
+ description: "The Instagram post or reel URL",
5750
+ placeholder: "https://www.instagram.com/reel/C8rKmYvsrck",
5751
+ },
5752
+ {
5753
+ name: "comment_id",
5754
+ type: "string",
5755
+ required: true,
5756
+ description: "The parent comment ID from the Comments endpoint",
5757
+ placeholder: "18038110327814211",
5758
+ },
5759
+ {
5760
+ name: "cursor",
5761
+ type: "string",
5762
+ required: false,
5763
+ description: "The cursor to get more replies. Get `cursor` from the previous response.",
5764
+ placeholder: "QVFDc29...",
5765
+ },
5766
+ ],
5767
+ sampleResponse: {
5768
+ success: true,
5769
+ credits_remaining: 100,
5770
+ comments: [
5771
+ {
5772
+ id: "18277034998224667",
5773
+ text: "@username Thanks for the reply!",
5774
+ comment_like_count: null,
5775
+ child_comment_count: 0,
5776
+ created_at: "2024-06-28T06:20:32.000Z",
5777
+ parent_comment_id: "18038110327814211",
5778
+ user: {
5779
+ id: "25621023419",
5780
+ pk: "25621023419",
5781
+ username: "username",
5782
+ is_verified: false,
5783
+ profile_pic_url: "https://instagram.fosu2-2.fna.fbcdn.net/....jpg",
5784
+ },
5785
+ },
5786
+ ],
5787
+ cursor: null,
5788
+ has_more: false,
5789
+ },
5790
+ },
5516
5791
  // {
5517
5792
  // name: "Reels (We handle pagination)",
5518
5793
  // method: "GET",
@@ -6529,6 +6804,41 @@ export const instagramBaseApis = {
6529
6804
  is_fit_green: true,
6530
6805
  },
6531
6806
  },
6807
+ {
6808
+ name: "Profile Post Count",
6809
+ method: "GET",
6810
+ description: "Gets the total number of posts on an Instagram profile",
6811
+ fullDescription:
6812
+ "Returns the total post count shown on a public Instagram profile. Use this endpoint when Profile returns media_count as null or edge_owner_to_timeline_media.count contains only the current batch size. This endpoint makes a separate Instagram profile-page request so it does not add latency to the main Profile endpoint. Instagram does not expose this metadata for every profile; unavailable counts return an error without deducting a credit.",
6813
+ path: "/v1/instagram/profile/post-count",
6814
+ responseFields: [
6815
+ {
6816
+ path: "data.handle",
6817
+ description: "Instagram handle",
6818
+ },
6819
+ {
6820
+ path: "data.media_count",
6821
+ description: "Total number of posts shown on the profile",
6822
+ },
6823
+ ],
6824
+ params: [
6825
+ {
6826
+ name: "handle",
6827
+ type: "string",
6828
+ required: true,
6829
+ placeholder: "lifestyleperfume",
6830
+ description: "Instagram handle",
6831
+ },
6832
+ ],
6833
+ sampleResponse: {
6834
+ success: true,
6835
+ credits_remaining: 100,
6836
+ data: {
6837
+ handle: "lifestyleperfume",
6838
+ media_count: 2774,
6839
+ },
6840
+ },
6841
+ },
6532
6842
  {
6533
6843
  name: "Embed HTML",
6534
6844
  method: "GET",