Skip to main content

Documentation Index

Fetch the complete documentation index at: https://www.pickfu.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

The PickFu CLI (@pickfu/cli) lets you create surveys, check results, and manage polls directly from your terminal. It supports structured JSON output for automation and CI/CD workflows.

Installation

brew install pickfu/tap/pickfu

Supported platforms

PlatformArchitectureInstall method
macOSApple Silicon (arm64)Homebrew, curl, npx, npm
macOSIntel (x64)Homebrew, curl, npx, npm
Linuxx64curl, npx, npm
Linuxarm64curl, npx, npm
Windowsx64PowerShell, npx, npm
The curl/PowerShell installers download a standalone binary — no Node.js required. The npx method requires Node.js 20+ but needs no installation.

Authentication

Log in through the browser to connect the CLI to your PickFu account:
pickfu auth login
This opens a browser window for OAuth authorization. Once approved, your credentials are stored locally and refreshed automatically. For headless environments (servers, CI), use the --headless flag to print the authorization URL instead of opening a browser:
pickfu auth login --headless

API key

For non-interactive environments like CI pipelines or automation scripts, use an API key instead of OAuth:
# Interactive prompt (key never appears in shell history)
pickfu auth set-key

# Or pipe from clipboard (macOS)
pbpaste | pickfu auth set-key

# Or use an environment variable (for CI/automation)
export PICKFU_API_KEY=sk_...
pickfu survey list

# Or pass per-command via flag
pickfu survey list --token sk_...
Avoid echo "sk_..." | pickfu auth set-key — the key appears in shell history. Use the interactive prompt or pipe from clipboard instead.
Token precedence: --token flag > PICKFU_API_KEY env var > stored OAuth token > stored API key.

Managing credentials

pickfu auth status       # Check authentication status
pickfu auth status --local  # Check without contacting the API
pickfu auth logout       # Clear stored credentials

Commands

All commands support --json for machine-readable output.

Surveys

Create a survey

pickfu survey create
The CLI walks you through poll creation interactively. You can also provide options via flags:
pickfu survey create \
  --name "Logo test" \
  --question "Which logo do you prefer?" \
  --type head_to_head \
  --option "Logo A" \
  --option "Logo B" \
  --sample-size 50 \
  --country US \
  --targeting amznpr \
  --reporting age \
  --tag "Q2 testing"
Image polls use --option-image-url instead of --option:
pickfu survey create \
  --name "Packaging variants" \
  --question "Which design works best?" \
  --type ranked \
  --option-image-url https://cdn.example.com/v1.jpg \
  --option-image-url https://cdn.example.com/v2.jpg \
  --option-image-url https://cdn.example.com/v3.jpg \
  --sample-size 50 \
  --project proj_xyz
Or create from a JSON file:
pickfu survey create --from-file survey.json
FlagDescription
--from-filePath to a JSON file with survey definition
--nameSurvey name
--questionThe question text
--typeQuestion type (see supported types)
--optionText option (repeatable — use once per option)
--option-image-urlImage option URL (repeatable, mutually exclusive with --option)
--sample-sizeNumber of respondents
--countryCountry code (default: US)
--targetingTargeting trait code, e.g. amznpr (repeatable)
--reportingReporting trait code, e.g. age (repeatable)
--projectProject ID to assign the survey to
--tagTag name to attach (repeatable)

Get survey details

pickfu survey get <survey-id>

List surveys

pickfu survey list
FlagDescriptionDefault
--statusFilter by status (completed, in-progress, unpublished, archived)All
--limitResults per page20
--pagePage number1
--sort-bySort field (createdAt, name, creator, status)createdAt
--dirSort direction (asc, desc)desc

Update a draft survey

pickfu survey update <survey-id> --name "Updated name" --sample-size 100
Or update from a JSON file:
pickfu survey update <survey-id> --from-file updated-survey.json
FlagDescription
--from-filePath to JSON file with updates
--nameUpdated survey name
--sample-sizeUpdated respondent count
--countryUpdated country code

Publish a survey

Publish a draft survey to start collecting responses:
pickfu survey publish <survey-id>
Calling publish on an already-published survey returns a 400 Already published with a pointer to the /v1/surveys/{id}/respondents endpoint. Use pickfu survey add-respondents to extend the sample size of a running survey instead.

Clone a survey

Duplicate an existing survey as a new draft. Useful for re-running a poll with the same audience targeting and options, or for iterating on a previous test:
pickfu survey clone <survey-id>
pickfu survey clone <survey-id> --name "Round 2" --sample-size 30
pickfu survey clone <survey-id> --project proj_xyz --json
FlagDescription
--nameOverride the cloned survey name (defaults to “Copy of <name>“)
--sample-sizeOverride sample size (defaults to source survey)
--projectProject ID to assign the clone to

Extract image URLs

List the image URLs of every option in a survey — useful for downloading source images for further processing:
pickfu survey extract-images <survey-id>
pickfu survey extract-images <survey-id> --json

View responses

Get individual responses with explanations and demographics:
pickfu survey responses <survey-id>
FlagDescriptionDefault
--pagePage number1
--limitResponses per page20
--question-idFilter responses by questionAll questions

Watch a survey

Block until a survey completes — useful in scripts and CI:
pickfu survey watch <survey-id>
FlagDescriptionDefault
--intervalPolling interval in seconds30
--exit-statusExit with code 2 if cancelled or archivedfalse
--jsonEmit one NDJSON object per poll tick to stdout, plus a final completion objectfalse

Targeting and reporting

List available targeting traits

pickfu targeting list --country US
Returns all demographic targeting traits available for the specified country. Pass each permalink value as a --targeting flag in survey create (e.g. --targeting amznpr).

List available reporting demographics

pickfu reporting list --country US
Returns all demographic breakdowns available for survey results.

Tags

pickfu tag list                    # List your tags
pickfu tag list --query "amazon"   # Search tags
pickfu tag create "Q2 testing"     # Create a new tag

Media

Generate an image

Generate an image from a text prompt and get a CDN URL:
pickfu media generate --prompt "A playful logo for a kids app"
pickfu media generate --prompt "Product banner" --aspect-ratio 16:9
Pass one or more reference images so the model can preserve product appearance across regenerated variants — useful for iterating on packaging, A+ content, or main-image variants:
pickfu media generate \
  --prompt "Same product, holiday-themed packaging" \
  --reference-image-url https://cdn.example.com/source.jpg \
  --aspect-ratio 1:1
FlagDescriptionDefault
--promptText prompt describing the image (required)
--aspect-ratioAspect ratio (1:1, 16:9, 9:16, 3:2, 2:3, etc.)1:1
--reference-image-urlReference image URL the model can see while generating (repeatable, max 3)

Upload media

Upload an image or video to the PickFu CDN from a URL or local file:
pickfu media upload --url https://example.com/image.png
pickfu media upload --file ./logo.png
pickfu media upload --file ./demo.mp4 --resource-type video
FlagDescription
--urlURL of the media to upload (mutually exclusive with --file)
--filePath to a local file to upload (mutually exclusive with --url)
--filenameDisplay name hint for the uploaded media
--resource-typeimage or video (auto-detected if omitted)
YouTube, Vimeo, and Wistia URLs are returned as-is since PickFu embeds them natively.

Inspect media

Fetch metadata (content type, size, ETag) for an image or video URL without downloading the full payload:
pickfu media show https://media-cdn.pickfu.com/.../v1.jpg
pickfu media show https://media-cdn.pickfu.com/.../v1.jpg --open
pickfu media show https://media-cdn.pickfu.com/.../v1.jpg --json
FlagDescriptionDefault
--openOpen the URL in the system default browser after fetching metadatafalse

Projects

pickfu project list                          # List projects
pickfu project create --name "Q2 Research"   # Create a project
pickfu project get <project-id>              # Get project details
pickfu project update <project-id> --name "Updated name"
FlagDescription
--nameProject name
--descriptionProject description
--bookmarkBookmark the project
--archiveArchive the project

Playbooks

Browse step-by-step research guides:
pickfu playbook list                     # List available playbooks
pickfu playbook get <slug>               # Get full playbook with instructions

Schema introspection

View the full input/output schemas for any command — useful for building integrations:
pickfu schema             # List all commands
pickfu schema survey.create  # Detailed schema for a specific command

Generic API access

Make authenticated API requests directly:
pickfu api GET /v1/surveys
pickfu api POST /v1/surveys --body '{"name": "test"}'
pickfu api GET /v1/traits/targeting --query country=US

OpenClaw

See the OpenClaw page to run the PickFu CLI inside an agentic skill, including the ready-made Claw Hub market research workflow.

Supported question types

TypeDescription
head_to_headA/B comparison where respondents pick a favorite (2 options)
rankedRespondents rank options in preference order (3-8 options)
open_endedSingle-concept poll with written feedback
click_testHeatmap generation from image clicks
emoji_ratingEmoji sentiment selection with explanation
star_rating1-5 star rating with feedback
five_second_testBrief timed exposure for first impressions
screen_recordingRecord user interaction with content
single_selectChoose one from multiple options (3-8 options)
multi_selectSelect multiple answers from options (3-8 options)

Sample sizes

Available respondent counts: 15, 30, 50, 75, 100, 200, 300, 500

Need help?

pickfu --help
pickfu survey --help
pickfu survey create --help
Or contact support@pickfu.com for assistance.