SMF Works — AI Solutions for Small Business
← Back to all skills
Freeform-builder

Form Builder

Build custom forms for any data collection need. Design forms with various field types, embed them on websites or share via links, collect responses securely, and export data to CSV or integrate with other tools via webhooks.

Key Features

  • Drag-and-drop form builder
  • Multiple field types and validation
  • Response collection and management
  • Data export to CSV/Excel
  • Webhook integrations

Common Use Cases

  • Create contact and feedback forms
  • Build event registration pages
  • Collect survey responses
  • Manage application submissions

Custom Workflow Integration

This skill can be customized for your specific workflow as part of an SMF Works services engagement. Whether you need custom automation rules, integrations with your existing tools, or specialized configurations for your team, we can tailor this skill to fit your exact requirements.

Explore Services

Installation

# Install the skill (via TUI or CLI)

smfw install form-builder

# Get help

smfw run form-builder --help

💡 Tip: Install via the OpenClaw TUI skill manager for an interactive experience, or use the CLI command above.

Setup Guide

Form Builder — Setup Guide

Estimated setup time: 5 minutes
Difficulty: Easy
Tier: Pro — requires SMF Works Pro subscription ($19.99/mo)


What You'll Need

RequirementDetailsCost
SMF Works Pro subscriptionsmfworks.com/subscribe$19.99/mo
Python 3.8+Built into macOS 12+, available on LinuxFree
OpenClawInstalled and authenticatedFree
smfworks-skills repositoryCloned via gitIncluded
A web browserFor viewing and submitting formsFree

Step 1 — Subscribe and Authenticate

openclaw auth status

If not subscribed: smfworks.com/subscribe


Step 2 — Get the Repository

git clone https://github.com/smfworks/smfworks-skills ~/smfworks-skills

Step 3 — Navigate and Verify

cd ~/smfworks-skills/skills/form-builder
python3 main.py help

Verify Your Setup

Create and serve a test form:

Step 1 — Create a form:

python3 main.py create --name "Test Form" --fields name,email

Note the FORM-ID in the output.

Step 2 — Serve it:

python3 main.py serve FORM-XXXXX --port 8080

Step 3 — Open in browser:

Go to http://localhost:8080/FORM-XXXXX in your browser. You should see the form with name and email fields.

Step 4 — Submit a test response:

Fill in the form and click submit.

Step 5 — Stop the server (Ctrl+C) and view responses:

python3 main.py responses FORM-XXXXX

You should see your test submission. Setup is complete.


Port Selection

The default port is 8080. If it's already in use, pick another:

python3 main.py serve FORM-ID --port 9090

Check what's using a port: lsof -i :8080


Firewall Notes

The server binds to localhost by default. If you want to serve on your LAN:

# Find your local IP
ip addr show | grep "inet 192"
# Then share: http://192.168.x.x:8080/FORM-ID

Note: Opening ports on a LAN exposes the form to all devices on that network.


Troubleshooting

Error: SMF Works Pro subscription required — Subscribe at smfworks.com/subscribe.

Address already in use: port 8080 — Use a different port: --port 8081

Form not loading in browser — Ensure the server is still running (it must stay running while you use the form).


Next Steps

Setup complete. See HOWTO.md for walkthroughs on creating forms, adding fields, serving, collecting responses, and exporting data.

How-To Guide

Form Builder — How-To Guide

Prerequisites: SMF Works Pro subscription active. Setup complete (see SETUP.md).


Table of Contents

  1. How to Create a Form
  2. How to Serve a Form and Collect Responses
  3. How to View and Export Responses
  4. How to Add Fields to an Existing Form
  5. Automating with Cron
  6. Combining with Other Skills
  7. Troubleshooting Common Issues
  8. Tips & Best Practices

1. How to Create a Form

What this does: Creates a form with specified field names and types.

Steps

Step 1 — Navigate to the skill.

cd ~/smfworks-skills/skills/form-builder

Step 2 — Create the form with quick flags.

python3 main.py create --name "Contact Form" --fields name,email,company,message

Output:

✅ Form created: FORM-A1B2C3
   Name: Contact Form
   Fields: name (text), email (email), company (text), message (textarea)

Step 3 — Or create interactively.

python3 main.py create

Follow the prompts to name the form and add fields one by one with custom types.

Step 4 — Verify the form.

python3 main.py show FORM-A1B2C3

Result: Form created and ready to serve.


2. How to Serve a Form and Collect Responses

What this does: Starts a local HTTP server that renders your form and saves submissions.

Steps

Step 1 — Start the server.

python3 main.py serve FORM-A1B2C3 --port 8080

Output:

🌐 Form Server Started
   Form: Contact Form (FORM-A1B2C3)
   URL: http://localhost:8080/FORM-A1B2C3
   Press Ctrl+C to stop

Step 2 — Open the form in your browser.

Navigate to: http://localhost:8080/FORM-A1B2C3

You'll see:

Contact Form
─────────────────────────────

Name: [text input]
Email: [email input]
Company: [text input]
Message: [textarea]

[Submit]

Step 3 — Submit a test response.

Fill in the form and click Submit.

The server terminal shows:

[09:42:34] POST /FORM-A1B2C3/submit 200 — 1 submission saved

Step 4 — Keep the server running as long as you need to collect submissions.

Press Ctrl+C when you're done collecting.

Result: Responses are saved locally and can be viewed or exported.


3. How to View and Export Responses

Step 1 — View responses in the terminal.

python3 main.py responses FORM-A1B2C3

Output:

📋 Responses: Contact Form (3 total)

1. 2024-03-15 09:42 — Alice Smith — alice@example.com — Acme Corp — "Interested in..."
2. 2024-03-15 10:15 — Bob Jones — bob@techco.io — TechCo — "Please call me..."
3. 2024-03-15 11:03 — Carol White — carol@startup.io — StartupCo — "Quick question..."

Step 2 — Export to CSV.

python3 main.py export FORM-A1B2C3 --format csv --output contacts.csv

Output:

✅ Exported 3 responses to contacts.csv

Step 3 — Export to JSON.

python3 main.py export FORM-A1B2C3 --format json --output responses.json

4. How to Add Fields to an Existing Form

When to use it: You forgot a field when creating the form, or want to add more questions.

python3 main.py add-field FORM-A1B2C3

Interactive prompts:

Field name: phone
Field type (text/email/number/textarea/select/checkbox/radio/date/tel/url): tel
Required? (y/n): n

✅ Field added: phone (tel)

The next time you serve the form, the new field will appear.


5. Automating with Cron

Export responses weekly

0 9 * * 1 python3 /home/yourname/smfworks-skills/skills/form-builder/main.py export FORM-A1B2C3 --format csv --output /home/yourname/Forms/responses-$(date +\%Y-W\%V).csv >> /home/yourname/logs/form-builder.log 2>&1

6. Combining with Other Skills

Form Builder + CSV Converter: Export responses and convert to Excel:

python3 ~/smfworks-skills/skills/form-builder/main.py export FORM-ID --format csv --output responses.csv
python3 ~/smfworks-skills/skills/csv-converter/main.py csv-to-excel responses.csv responses.xlsx

Form Builder + Lead Capture: Use Form Builder to collect structured data, then log key contacts to Lead Capture:

# After reviewing form responses:
python3 ~/smfworks-skills/skills/lead-capture/main.py capture
# Enter the lead's details from the form response

7. Troubleshooting Common Issues

Address already in use: port 8080

Fix: Another process is using that port. Use a different port: --port 8081. Or find and kill the occupying process: lsof -ti :8080 | xargs kill

Form not loading in browser

Fix: The server must be running when you access the form. Check the terminal — press Ctrl+C and restart if needed.

Submissions not appearing in responses

Fix: Verify the submission actually posted — the server terminal should show POST /FORM-ID/submit 200. If you see a different status code, there may be a validation error.

Export shows validation errors in CSV

Fix: Responses with invalid data are flagged. The export still includes them — review and clean as needed.


8. Tips & Best Practices

Name fields clearly. Use descriptive field names: first_name not field1. These become column headers in your CSV export.

Use email type for email fields. The email type validates the format on submission. This reduces invalid data in your responses.

Test the form before sharing it. Fill it in yourself first and check the response appears correctly in responses.

Keep the server running only while collecting. The server uses a port while running. Stop it with Ctrl+C when you're done collecting to free the port.

Export regularly. Run exports after each collection session so you have backups of responses outside ~/.smf/forms/.