Product Directory Submitter
Pricing
from $0.01 / 1,000 results
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
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
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:
- Log into Google (for OAuth and Gmail verification)
- Optionally you can log into other platforms and the agent will be logged in when run
- 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:
- Apify is SOC 2 Type II compliant - Independent security audits verify data handling practices
- 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.
- 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
- 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
Step 3: Set up browser session (optional but recommended)
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:
- Navigate to the target directory site
- Sign up or log in
- Fill out the submission form
- Upload your images
- Submit your product
Step 5: Handle failures
Check results for any failed sites. Common issues:
- Email verification required before you can submit (enable
autoVerifyEmailor 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
| Field | Type | Description |
|---|---|---|
productUrl | String | Your product/website URL |
email | String | Email for account signups (you'll receive verification emails here) |
logoSquare | String | URL to square logo image (240x240px or 400x400px, PNG recommended) |
screenshot1 | String | URL to primary product screenshot (1270x760px recommended) |
ogImage | String | URL to Open Graph / social preview image (1200x630px) |
targetSite | String | The directory URL to submit to (e.g., 'https://producthunt.com') |
Optional - Product Info
| Field | Type | Description |
|---|---|---|
productName | String | Name of your product |
tagline | String | Short tagline (aim for 60 characters) |
shortDesc | String | Brief description (aim for 200 characters) |
longDesc | String | Detailed description (500+ characters) |
productTags | Array | Tags/categories (e.g., "AI", "SaaS", "Productivity") |
socialLinks | Object | Social links: {"twitter": "...", "github": "..."} |
userInfo | Object | Your personal info for sites that ask about YOU (not the product) |
Optional - Images
| Field | Type | Description |
|---|---|---|
screenshot2 | String | Additional screenshot URL (1270x760px) |
screenshot3 | String | Additional screenshot URL (1270x760px) |
logoCircular | String | Circular/round logo for avatar displays (400x400px) |
Optional - Advanced
| Field | Type | Default | Description |
|---|---|---|---|
password | String | - | Password for new account signups (encrypted) |
customPrompt | String | - | Additional instructions for the AI agent specific to this site |
hasAccount | Boolean | false | If true, agent will try to log in instead of signing up |
browserSession | File | - | Browser session JSON for OAuth and platform logins |
autoVerifyEmail | Boolean | false | Auto-verify emails via Gmail (requires Google account in browserSession) |
maxAgentTurnsPerSite | Integer | 80 | Max AI turns before giving up (each turn = $0.03 with Gemini) |
browserWaitMinutes | Integer | 0 | Keep browser open after completion for debugging |
recordVideo | Boolean | true | Record 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 ApifyClientclient = 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().itemsprint('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
| Status | Description |
|---|---|
SUBMITTED | Successfully submitted to the directory |
FAILED | Submission 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.