Operated by Sourcelane✓ verified
Search Instagram posts, Reels and carousels by any keyword or phrase. Export captions, hashtags, likes, comments, views, dates, locations and author profiles.
A scraper that performs Instagram-style keyword and phrase searches (like the Instagram search bar) to find and export matching posts; it returns one record per matched post containing the post identity and URL, post type (reel/photo/carousel/video), caption text with hashtags and mentions, posting timestamp, engagement metrics (likes, comments, play/views, video duration, paid partnership flag), media links and counts (thumbnail/cover, video, carousel media), location metadata (place name, address and coordinates when present), author/profile metadata (identifiers, display name, verification and privacy status, follower count, profile image) and search context (which keyword matched and the post’s rank). The connector accepts plain words and multi-word phrases (hashtags are optional), operates without an Instagram login or cookies, supports filters for post type, minimum engagement and date ranges, preserves per-keyword resume cursors for continued pagination, and typically returns hundreds of relevance-ranked results per keyword with Reels dominating most keyword result sets.
Verified Oct 25, 10:11 PM
$0.0015
per post
Up to 100 per call. Only pay for results returned; failed calls are refunded.
Content research and trend spotting
See which Reels and posts rank for a topic and what captions, hooks and hashtags they use
Influencer discovery
Find creators posting about your niche, with follower counts and verified status
Brand and competitor monitoring
Track who posts about a brand, product or campaign phrase
Local business lead generation
Search phrases like `coffee shop`, `nail salon` or `dentist` and collect the tagged locations and accounts
Market and audience research
Pull hundreds of posts on a subject for sentiment or topic analysis
One or more keywords or phrases to search Instagram posts for, e.g.
Only save posts published on or after this date, or a relative value like "30 days".
Only save posts published on or before this date, or a relative value like "7 days".
Optional settings
| Window | Uptime | Success rate | p50 | p95 | Calls |
|---|---|---|---|---|---|
| 24h | — | — | — | — | 0 |
| 7d | — | — | — | — | 0 |
| 30d | — | — | — | — | 0 |
Call it through Sourcelane's gateway or MCP server. We run the connector, apply your agent's spend guardrails, and bill only the results returned.
Call it via Sourcelane
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"instagram-keyword-posts-scraper","params":{"keywords":["coffee shop"],"maxPostsPerKeyword":5},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
keywords | array | required | One or more keywords or phrases to search Instagram posts for, e.g. "coffee shop", "home workout", "nike". Plain words and multi-word phrases both work — no # needed. Each keyword is searched separately and every row records which keyword found it. |
maxPostsPerKeyword | integer | optional | Maximum number of posts to save for each keyword. Set 0 to fetch everything Instagram returns for the keyword (typically a few hundred posts). Capped at 100 per call. |
postType | string | optional | Only save posts of this type. Instagram's keyword results are mostly Reels, so photo, carousel and video filters return fewer posts per page scanned. |
minLikes | integer | optional | Only save posts with at least this many likes. Posts whose like count is hidden are skipped when this is set. Leave at 0 for no filter. |
dateFrom | string | optional | Only save posts published on or after this date (YYYY-MM-DD), or a relative value like "30 days". Results are ranked by relevance, not date, so this filters the results rather than reaching further back. |
dateTo | string | optional | Only save posts published on or before this date (YYYY-MM-DD), or a relative value like "7 days". |
pageId | string | optional | Paste NEXT_PAGE_ID from the previous run's Key-value store to continue each keyword where it stopped. Leave empty to start fresh. |
Each result contains
| Field | Type | Description |
|---|---|---|
recordType | string | — |
keyword | string | Keyword |
position | integer | # |
postId | string | — |
shortcode | string | — |
url | string | Post URL |
type | string | Type |
productType | string | — |
caption | string | Caption |
hashtags | array | Hashtags |
mentions | array | — |
takenAt | string | Posted |
takenAtTimestamp | integer | — |
likeCount | integer | Likes |
commentCount | integer | Comments |
playCount | integer | Plays |
videoDuration | number | — |
carouselMediaCount | null | — |
isPaidPartnership | boolean | — |
displayUrl | string | Preview |
videoUrl | string | — |
carouselImageUrls | array | — |
locationName | null | Location |
locationCity | null | — |
locationAddress | null | — |
locationId | null | — |
locationLat | null | — |
locationLng | null | — |
ownerId | string | — |
ownerUsername | string | Owner |
ownerFullName | string | — |
ownerIsVerified | boolean | Verified |
ownerIsPrivate | boolean | — |
ownerFollowerCount | integer | Owner followers |
ownerProfilePicUrl | string | — |
scrapedAt | string | — |
Pick your tool and connect in under a minute. Then just ask — for example: “Pull the last 20 posts from @natgeo and tell me which formats get the most engagement.”
Connect Claude
Web, desktop and mobile. One click, then confirm.
Adds the Sourcelane MCP server with your key as a header.
claude mcp add --transport http sourcelane https://api.usesourcelane.com/mcp \
--header "Authorization: Bearer sl_live_your_agent_key"Alternative to the connector URL: add to claude_desktop_config.json, then restart Claude.
{
"mcpServers": {
"sourcelane": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.usesourcelane.com/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer sl_live_your_agent_key"
}
}
}
}Add to ~/.cursor/mcp.json (or Windsurf's mcp_config.json).
{
"mcpServers": {
"sourcelane": {
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer sl_live_your_agent_key"
}
}
}
}Save as .vscode/mcp.json. VS Code prompts for your key once.
{
"servers": {
"sourcelane": {
"type": "http",
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer ${input:sourcelane-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "sourcelane-key",
"description": "Sourcelane agent key",
"password": true
}
]
}Create a GPT → Actions → Import from URL, then Authentication: API Key, Bearer.
https://usesourcelane.com/openapi.jsonOne POST. Pass maxResults to cap cost.
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"instagram-keyword-posts-scraper","params":{"keywords":["coffee shop"],"maxPostsPerKeyword":5},"maxResults":10}'Wrap the REST call as a tool, or point an MCP client at the endpoint.
import requests
res = requests.post(
"https://api.usesourcelane.com/v1/call",
headers={"Authorization": "Bearer sl_live_your_agent_key"},
json={
"listing": "instagram-keyword-posts-scraper",
"params": {"keywords":["coffee shop"],"maxPostsPerKeyword":5},
"maxResults": 10,
},
timeout=300,
)
body = res.json()
print(body["receipt"]["chargedMicros"], "micro-USD for", body["receipt"]["results"], "results")
print(body["data"])—
0 reviews
Leave a review
Loading reviews…