Help center

How to use Rubber Ducky.

Rubber Ducky takes a list of leads, researches each one across the open web, writes a personalized first email per row, audits the output through our humanizer engine, and pushes the result back into your sending tool. Here is how to do every part of that.

Getting started

01

Sign in or create an account

Go to /login. Use email and password, magic link, or sign up at/register. New accounts auto-create a workspace with a free credit balance.
02

Connect Instantly (optional but recommended)

In Settings open the Instantly integration card. Paste your Instantly v2 API key, click Test connection, then Save & connect. The lightning bolt in the topbar turns blue and glows. We never expose your key to the browser.
03

Upload your first list

Either drop a CSV at /lists/upload or click Get from Instantly on the lists page to import a campaign.
04

Watch the worker generate

The grid updates live as each row gets researched (Serper) and written (Gemini). One credit per email. Every generated email costs 1 credit. Sub-100ms per page even on 100,000-row lists.

Upload a list

Open /lists/upload. The wizard has 5 steps:

01

Drop a file or paste a Google Sheet URL

We accept CSV, XLSX, and shared Google Sheets URLs. Files up to 60 MB. Up to 100,000 rows in one list — bigger lists fine, just split them.
02

Map your columns

We auto-detect Name / Email / Company / Title / Website / Notes from common header names. Anything we miss is one dropdown to fix. Every other column is preserved in the lead row's raw field so the AI can still use it.
03

Preview rows

Spot-check the mapping by scrolling the first 50 rows. If something is off, jump back to step 2.
04

Configure your pitch

Tone, length, CTA, sender persona, and four short business fields: business description, offer, problem solved, ideal client. These get fed to Gemini as the per-customer context for every row in the list.
05

Launch (or test sample first)

Toggle test sample mode to run only the first 10 rows before committing the rest. If the sample reads well, click Release the rest from the list page and the remaining rows queue up.
Tip
Subject lines come back as 2 to 5 word personal notes by default. The humanizer engine strips hyphens, AI tells, banned connectives, and varies sentence rhythm before output. Check theRegenerate section if you want a different draft.

Import from Instantly

On /lists click the outlined Get from Instantly button (top right). The popup loads every campaign in your Instantly account, each as a solid blue button labeled with the campaign name. Click one to import every lead in it.

01

Pick the source campaign

Each campaign row shows the name, status (Draft / Active / Paused / Completed / Archived), and current lead count.
02

Click Import

We pull every lead via Instantly's paginated leads endpoint, save the originalinstantly_lead_id on each row, and queue the worker to start writing. You land on the new list page automatically.
03

Same flow as a CSV upload from here

Generation, review, approval, and export all work identically.
Tip
You can also import from the blue lightning Instantly pill in the topbar — every campaign in the snapshot modal has its own Import button.

Review and approve emails

Open any list to see the live grid. Each row shows the lead, generation status, the AI subject, and a body preview.

01

Click any row

A side drawer slides in with the full subject, body, and lead context. This is exactly what will be sent.
02

Approve / reject

Approve marks a row good to send. Reject excludes it from any export. Both are reversible. Use the toolbar for bulk actions on the current filter.
03

Filter the view

Top of the grid: All / Done / Generating / Queued / Approved / Rejected / Failed. The bulk actions act on whichever filter is active.
04

Search inside a list

The search box on the list page filters by name, email, company, or subject text without a server roundtrip.

Regenerate or edit a draft

Two paths if a draft is not quite right:

01

Regenerate with feedback

Open the row, click Regenerate, and write a short note like "drop the funding mention, focus on their hiring page". That note is injected as a regeneration-context block on the next Gemini call. Cost: 1 credit. The Serper research is cached on the row, so re-research is free.
02

Edit by hand

Click Edit in the drawer to tweak subject and body inline. Click Save. Edited rows are still subject to Approve / Reject.
Tip
Regenerate keeps trying until you stop. Each attempt is logged in the regen_count field on the lead.

Export back to Instantly

From any list page, click the blue Export to Instantly button (top right). The popup gives you two tabs.

01

Tab: Use existing campaign

Every campaign in your Instantly account is a solid blue button. The campaign the list came from (if any) is tagged "From here." Active campaigns require a second click to confirm — no accidental dumps into a live send.
02

Tab: Create new campaign

Type a name (we pre-fill from the list name), click Create campaign & export. We POST to Instantly's campaigns endpoint, then create every approved lead inside it.
03

Auto-configure step 1

Right after the leads land, we GET the campaign, detect its sequence shape, and PATCH step 1 with{{ai_subject}} / {{ai_body}}. We verify with a readback before reporting success. You never touch Instantly's sequence editor.
04

Launch in Instantly

The toast confirms success. Open Instantly, hit Resume campaign, and step 1 fires per-lead personalized. Step 2 onward stays as your static followups.
Tip
Built-in safety: invalid emails skipped, duplicates within the list skipped, leads already in the target campaign skipped, 50 consecutive failures aborts the run. Resumes automatically — re-clicking Export on a partially-pushed list picks up where it stopped.

Export as CSV

On a list page, click Export CSV in the toolbar. We stream the export so 100,000-row lists download without holding the entire file in memory. The CSV includes row index, lead fields, status, approval, subject, body, and generation timestamp. Filtered grids export only the current filter.

Templates

/templates stores the prompt recipes you reuse — tone, sender persona, CTA wording. Click New template to save one. On the next list upload, skip step 4 of the wizard by picking the template.

Tip
Templates are scoped to your workspace. Hover any template card to see the delete (trash) icon.

Credits and billing

One credit equals one personalized email written. Approving or rejecting a draft after it's written doesn't refund the credit — the work is already done. Regenerations also cost one credit each.

01

Plans (recurring)

Starter $29/mo · 2,500 credits · Growth $79/mo · 10,000 credits · Scale $249/mo · 50,000 credits. Plan credits reset every period and do not carry over.
02

Top-ups (one-time)

Click Top up on the sidebar credit card. Three packs: 2.5k for $19, 10k for $60, 50k for $250. Top-up credits live for 30 days from purchase. Buying again before the timer expires extends it to a fresh 30 days for the whole top-up balance.
03

Manage your plan

Settings → Billing → Manage plan opens the Stripe customer portal: change plan, update card, view invoices.
04

See where credits went

/generations lists every job, success rate, credits used, and links into each list.

Notifications

The bell icon (topbar) shows live activity:

  • List complete — a generation job finished. Click to review.
  • Job running — worker is actively writing. Click to watch the grid.
  • List failed — something broke. Click to see the failure detail.
  • Credits low — under 100 remaining this period. Click to top up.
  • List created — a new list has been queued.

The badge counts unread items. Notifications poll every 45 seconds and refresh on tab focus.

Settings

/settings has four cards:

  • Workspace — name and default sender. Save changes writes both to Supabase.
  • Billing — current plan badge, credits used this period, manage plan button.
  • Instantly integration — paste/test/save your Instantly v2 API key.
  • Account — your email and user ID, both copy-paste friendly.

Troubleshooting

The Instantly pill is grey or amber, not blue.
Grey means no key saved. Click it and paste the key in Settings. Amber means Instantly rejected the saved key. Open Settings, disconnect, and paste a fresh one from Instantly → Settings → Integrations → API Keys.
The Sequences tab in Instantly looks empty after I exported.
Open the campaign in Instantly, go to Sequences. Step 1 should show{{ai_subject}} and {{ai_body}}. That is the template — Instantly substitutes per-lead values when it sends. If the placeholders are missing, click Retry sequence in the Rubber Ducky export toast, or trigger a re-export which auto-wires the sequence.
A row says Failed.
Open the row to see the reason. Common causes: invalid email format, Serper returned nothing, or Gemini was rate-limited. Regenerate the row at no cost (research is cached) once the underlying issue clears.
Export to Instantly says aborted after consecutive failures.
We bail after 50 consecutive failures so we don't burn through 9,000 bad calls. Almost always means the Instantly API key is bad or the campaign id is wrong. Check the connection status in the topbar, then re-export.
The grid is slow on a very large list.
Should not happen, but if it does: refresh the page. Pagination is keyed on a composite index — page reads are sub-30ms even at 100k rows. Bulk-update operations on 50k+ rows take 1-2 seconds, that is expected.
I uploaded a list but nothing is generating.
The worker polls every 2 seconds. If the list status stays at queued for more than a minute, your workspace may be out of credits. Check the credit card on the sidebar or top up.

Contact and support

Email support@rbrducky.com. Include your workspace name (top of the sidebar) so we can find your account fast. We answer same-day during US business hours.

For privacy, terms, and how we handle your data:Privacy ·Terms.