Product Directory Submitter avatar
Product Directory Submitter

Pricing

from $0.01 / 1,000 results

Go to Apify Store
Product Directory Submitter

Product Directory Submitter

Automatically submit your startup or product to multiple directories using an AI Agent. Stop manually filling out the same forms on ProductHunt, AlternativeTo, SideProjectors, etc. Fill all the required fields and you can submit your product to ANY URL. See ReadMe for full instructions.

Pricing

from $0.01 / 1,000 results

Rating

0.0

(0)

Developer

Mark Rieck

Mark Rieck

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Product Directory Submitter (Vision/Camoufox)

Automatically submit your startup or product to a directory using an AI Agent. Works with Product Hunt, BetaList, Indie Hackers, and any other submission site.

This actor uses an AI Agent to navigate the directory site, click and fill forms, sign up for an account, and submit your product - just like a human would. A video recording of what the agent does will be saved to storage (unless turned off). You have complete visibility into what happened during the submission process.

How much will it cost to run?

Pricing

Product Directory Submitter uses Gemini by default at $0.03 per AI agent turn.

  • Average cost: ~$0.90 per site (~30 turns)
  • Maximum cost: Configurable via maxAgentTurnsPerSite (default 80 turns = $2.40 max per site)

Claude is available as an alternative AI provider at $0.05 per turn via the aiProvider input field.

The agent keeps trying until successful submission, or the turn limit is reached. If a site fails, you will be given a message from the agent what went wrong.

IMPORTANT: Some sites REQUIRE Google OAuth for login

Some sites require Google Sign-in - to run automations on those sites you need to upload a browser session with your Google session credentials.

Browser Session Setup

A browser session allows the agent to:

  • Use "Sign in with Google" for faster signups on supported sites
  • Auto-verify emails by accessing your Gmail
  • Post to platforms where you have existing accounts (Reddit, Twitter, etc.)

How to Create a Browser Session

Use the browser-session-capture tool:

$git clone https://github.com/mrieck/browser-session-capture.git && cd browser-session-capture && python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt && python capture_browser_session.py

This opens a browser where you:

  1. Log into Google (for OAuth and Gmail verification)
  2. Optionally you can log into other platforms and the agent will be logged in when run
  3. Press enter in terminal when done

The tool saves browser_session.json which you upload to the actor's browserSession input field.

Note: Sessions expire after 2-4 weeks. Re-capture when needed.

Is My Browser Session Secure?

Yes. Your session data is protected by multiple layers of security:

  1. Apify is SOC 2 Type II compliant - Independent security audits verify data handling practices
  2. Temporary signed URLs - When you upload via the file input, your session goes to Apify's Key-Value Store and the actor receives a pre-signed URL (not the raw file). This URL is only accessible during the actor run.
  3. Responsible code handling:
    • Session content is never logged (only "session loaded" confirmation messages)
    • Session is never persisted to output datasets or storage
    • Each browser context is isolated (Camoufox)
    • Contexts are properly closed after each site
  4. Data encrypted at rest - Apify stores all data on AWS with encryption

Recommendation: Use a dedicated Google account for automation rather than your primary account. Sessions expire after 2-4 weeks, limiting any exposure window.

How to use Product Directory Submitter?

Step 1: Prepare your product assets

Before running, gather:

  • Your product URL
  • Square logo (240x240px or 400x400px PNG)
  • Primary screenshot (1270x760px)
  • OG/social image (1200x630px)
  • Product name, tagline, and descriptions

Step 2: Configure inputs

Enter your product details in the actor input form:

  • Required fields: URL, email, logo, screenshot, OG image
  • Optional: Additional screenshots, descriptions, social links

For OAuth signups ("Sign in with Google") and auto email verification, upload a browser session file. See Browser Session Setup below.

Step 4: Run the actor

Click "Start" and monitor progress. The actor will:

  1. Navigate to the target directory site
  2. Sign up or log in
  3. Fill out the submission form
  4. Upload your images
  5. Submit your product

Step 5: Handle failures

Check results for any failed sites. Common issues:

  • Email verification required before you can submit (enable autoVerifyEmail or verify manually and run again)
  • CAPTCHA encountered (I've seen the Agent successfully complete CAPTCHA but it may run into one that it fails on)
  • Form changes on the site

Re-run the actor to retry failed sites automatically.

Input Parameters

Required

FieldTypeDescription
productUrlStringYour product/website URL
emailStringEmail for account signups (you'll receive verification emails here)
logoSquareStringURL to square logo image (240x240px or 400x400px, PNG recommended)
screenshot1StringURL to primary product screenshot (1270x760px recommended)
ogImageStringURL to Open Graph / social preview image (1200x630px)
targetSiteStringThe directory URL to submit to (e.g., 'https://producthunt.com')

Optional - Product Info

FieldTypeDescription
productNameStringName of your product
taglineStringShort tagline (aim for 60 characters)
shortDescStringBrief description (aim for 200 characters)
longDescStringDetailed description (500+ characters)
productTagsArrayTags/categories (e.g., "AI", "SaaS", "Productivity")
socialLinksObjectSocial links: {"twitter": "...", "github": "..."}
userInfoObjectYour personal info for sites that ask about YOU (not the product)

Optional - Images

FieldTypeDescription
screenshot2StringAdditional screenshot URL (1270x760px)
screenshot3StringAdditional screenshot URL (1270x760px)
logoCircularStringCircular/round logo for avatar displays (400x400px)

Optional - Advanced

FieldTypeDefaultDescription
passwordString-Password for new account signups (encrypted)
customPromptString-Additional instructions for the AI agent specific to this site
hasAccountBooleanfalseIf true, agent will try to log in instead of signing up
browserSessionFile-Browser session JSON for OAuth and platform logins
autoVerifyEmailBooleanfalseAuto-verify emails via Gmail (requires Google account in browserSession)
maxAgentTurnsPerSiteInteger80Max AI turns before giving up (each turn = $0.03 with Gemini)
browserWaitMinutesInteger0Keep browser open after completion for debugging
recordVideoBooleantrueRecord browser session videos (saved to KV store)

Input Examples

Basic (Required Fields Only)

{
"productUrl": "https://myproduct.com",
"email": "hello@myproduct.com",
"logoSquare": "https://myproduct.com/logo-400x400.png",
"screenshot1": "https://myproduct.com/screenshot-1270x760.png",
"ogImage": "https://myproduct.com/og-1200x630.png",
"targetSite": "https://www.producthunt.com"
}

Full Example

{
"productUrl": "https://myproduct.com",
"email": "hello@myproduct.com",
"password": "SecurePassword123!",
"productName": "MyProduct",
"tagline": "The best way to do X",
"shortDesc": "MyProduct helps teams accomplish X faster with AI-powered automation.",
"longDesc": "MyProduct is a comprehensive solution for teams looking to streamline their workflow...",
"productTags": ["AI", "SaaS", "Productivity", "Developer Tools"],
"logoSquare": "https://myproduct.com/logo-400x400.png",
"screenshot1": "https://myproduct.com/screenshot1.png",
"screenshot2": "https://myproduct.com/screenshot2.png",
"ogImage": "https://myproduct.com/og-image.png",
"targetSite": "https://www.producthunt.com",
"socialLinks": {
"twitter": "https://twitter.com/myproduct",
"github": "https://github.com/myproduct"
},
"autoVerifyEmail": true,
"maxAgentTurnsPerSite": 60
}

Custom Site with Instructions

{
"productUrl": "https://myproduct.com",
"email": "hello@myproduct.com",
"logoSquare": "https://myproduct.com/logo.png",
"screenshot1": "https://myproduct.com/screenshot.png",
"ogImage": "https://myproduct.com/og.png",
"targetSite": "https://reddit.com/r/startups",
"customPrompt": "Post as a text post with title and description. Flair as 'Show /r/startups'."
}

API Usage Examples

Using cURL

$curl -X POST "https://api.apify.com/v2/acts/prodmarkllc~product-directory-submitter/runs" -H "Content-Type: application/json" -H "Authorization: Bearer YOUR_APIFY_TOKEN" -d '{"productUrl": "https://myproduct.com", "email": "hello@myproduct.com", "logoSquare": "https://myproduct.com/logo.png", "screenshot1": "https://myproduct.com/screenshot.png", "ogImage": "https://myproduct.com/og.png", "targetSite": "https://www.producthunt.com"}'

Using JavaScript/Node.js (Apify Client)

import { ApifyClient } from 'apify-client';
const apifyClient = new ApifyClient({
token: 'YOUR_APIFY_TOKEN',
});
const run = await apifyClient
.actor('prodmarkllc~product-directory-submitter')
.call({
productUrl: 'https://myproduct.com',
email: 'hello@myproduct.com',
logoSquare: 'https://myproduct.com/logo.png',
screenshot1: 'https://myproduct.com/screenshot.png',
ogImage: 'https://myproduct.com/og.png',
targetSite: 'https://www.producthunt.com'
});
console.log('Run started:', run);
const { items } = await apifyClient
.dataset(run.defaultDatasetId)
.listItems();
console.log('Results:', items);

Using Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('prodmarkllc~product-directory-submitter').call(
run_input={
'productUrl': 'https://myproduct.com',
'email': 'hello@myproduct.com',
'logoSquare': 'https://myproduct.com/logo.png',
'screenshot1': 'https://myproduct.com/screenshot.png',
'ogImage': 'https://myproduct.com/og.png',
'targetSite': 'https://www.producthunt.com'
}
)
dataset_items = client.dataset(run['defaultDatasetId']).list_items().items
print('Results:', dataset_items)

Get Run Status

$curl "https://api.apify.com/v2/actor-runs/RUN_ID" -H "Authorization: Bearer YOUR_APIFY_TOKEN"

Get Results

$curl "https://api.apify.com/v2/datasets/DATASET_ID/items" -H "Authorization: Bearer YOUR_APIFY_TOKEN"

Results

The actor saves results to the Apify dataset. Each site submission creates a record:

{
"site_url": "https://www.producthunt.com",
"status": "SUBMITTED",
"turns_used": 28,
"timestamp": "2025-01-15T10:30:00.000Z"
}

Status Values

StatusDescription
SUBMITTEDSuccessfully submitted to the directory
FAILEDSubmission failed (check failure_reason)

Video Recordings

If recordVideo is enabled, browser session videos are saved to the Key-Value Store as WebM files. Useful for debugging failed submissions.

Supported Sites

The actor works with any product directory or submission site. Common sites include:

  • Product Hunt - producthunt.com
  • BetaList - betalist.com
  • Indie Hackers - indiehackers.com/products
  • TinyStartups - tinystartups.com
  • 10words - 10words.io
  • And many more...

Use any URL as targetSite - the agent will navigate the site and attempt to submit your product.

Support

Need help or found a bug? Report issues on Apify.

Are you non-technical and having trouble using this actor? Visit my website: https://directorylaunchhub.com

I made a dashboard to use this actor for product submissions. You can save money using this actor/API directly, but if you want a more user-friendly interface feel free to use my website.

AI-powered browser automation for startup directory submissions.