Screenpipe user-feedback
Query user feedback logs submitted via the app's "send logs" button. Use when debugging user-reported issues, searching for crash patterns, or reviewing feedback.
install
source · Clone the upstream repo
git clone https://github.com/screenpipe/screenpipe
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/screenpipe/screenpipe "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/user-feedback" ~/.claude/skills/screenpipe-screenpipe-user-feedback && rm -rf "$T"
manifest:
.claude/skills/user-feedback/SKILL.mdsource content
User Feedback Logs
Query feedback and logs submitted by users through the screenpipe app's "send logs" button. Data is stored in Supabase and accessible via the admin logs API.
Setup
The API requires a bearer token. Set
LOGS_ADMIN_SECRET in your environment or pass it directly. Ask the project maintainer for the token if you don't have it.
export LOGS_ADMIN_SECRET="<token>"
API Endpoint
GET https://screenpi.pe/api/admin/logs Authorization: Bearer $LOGS_ADMIN_SECRET
Query Parameters
| Param | Description | Example |
|---|---|---|
| Search feedback text (case-insensitive) | |
| Filter by OS | , , |
| Exact version match | |
| Filter by user/machine ID | |
| Filter by analytics ID | |
| Start date (ISO 8601) | |
| End date (ISO 8601) | |
| Results per page (max 200) | |
| Pagination offset | |
Common Queries
Recent feedback (last 24h)
curl -s "https://screenpi.pe/api/admin/logs?limit=20&from=$(date -u -v-24H '+%Y-%m-%dT%H:%M:%S' 2>/dev/null || date -u -d '24 hours ago' '+%Y-%m-%dT%H:%M:%S')" \ -H "Authorization: Bearer $LOGS_ADMIN_SECRET" | jq '.logs[] | {created_at, os, app_version, feedback: .feedback_text}'
Search for a keyword in feedback
curl -s "https://screenpi.pe/api/admin/logs?q=audio&limit=20" \ -H "Authorization: Bearer $LOGS_ADMIN_SECRET" | jq '.logs[] | {created_at, os, app_version, feedback: .feedback_text}'
Windows-only issues
curl -s "https://screenpi.pe/api/admin/logs?os=windows&limit=30" \ -H "Authorization: Bearer $LOGS_ADMIN_SECRET" | jq '.logs[] | {created_at, os_version, app_version, feedback: .feedback_text}'
Feedback for a specific version
curl -s "https://screenpi.pe/api/admin/logs?app_version=2.2.290&limit=50" \ -H "Authorization: Bearer $LOGS_ADMIN_SECRET" | jq '.logs[] | {created_at, os, feedback: .feedback_text}'
Count total feedback entries
curl -s "https://screenpi.pe/api/admin/logs?limit=1" \ -H "Authorization: Bearer $LOGS_ADMIN_SECRET" | jq '{total: .total}'
Response Shape
{ "logs": [ { "id": "uuid", "type": "user", "identifier": "user_abc123", "os": "darwin", "os_version": "15.3.2", "app_version": "2.2.290", "feedback_text": "audio stopped working after update", "screenpipe_id": "analytics_id", "created_at": "2026-03-30T15:30:00Z", "file_path": "logs/user/abc123/2026-03-30T15:30:00.log", "screenshot_url": "logs/user/abc123/2026-03-30T15:30:00_screenshot.png", "video_url": "logs/user/abc123/2026-03-30T15:30:00_video.mp4" } ], "total": 1234, "limit": 20, "offset": 0 }
Tips
,file_path
, andscreenshot_url
are S3 keys, not direct URLs. You can't download them directly — they need signed URLs generated server-side.video_url
can be null if the user just sent logs without writing a message.feedback_text
is either a Clerk user ID (starts withidentifier
) or a random machine UUID for anonymous users.user_- Results are always sorted newest first.
- Use
/from
to narrow time ranges when investigating specific incidents.to - Cross-reference
with git tags to check if the issue is fixed in a newer release.app_version