Documentation

Everything you need to know

Loylty is a B2B outreach platform that fills and queues contact forms on contractor websites — automatically. This guide covers every feature from setup to your first live campaign.

💡
New here? Start with the Quick Start Guide — you can have your first campaign running in under 10 minutes.

🎯 What is Loylty?

Loylty is a B2B outreach automation tool designed for businesses that sell products or services to contractors. Instead of cold emails that land in spam, Loylty finds and fills the contact forms directly on each contractor's website — putting your message exactly where they'll see it.

You provide a list of target companies (or pull them from the built-in database), write your outreach message once, and Loylty handles the rest: opening each contact page, identifying the form fields, pre-filling your information, and queueing everything for your final review before anything gets sent.

⚠️
You are always in control. Loylty never automatically submits a form. Every record is reviewed and submitted by you. The platform handles the tedious work of finding and filling forms — the final send is always a human decision.

How It Works

  • 1
    Import your list. Upload a CSV of target companies, or pull contacts directly from the Loylty database of 1.6M+ contractor businesses across the US.
  • 2
    Write your message. Create one or more message templates using simple tags like {{company_name}} and {{city}}. Loylty rotates variations automatically so your outreach doesn't look templated.
  • 3
    Run the campaign. Loylty opens each contact page in an automated browser, maps the form fields (Name, Email, Phone, Message), pre-fills your sender info, and generates the outreach message.
  • 4
    Review and send. Records that need your attention surface as Needs Manual — you review, edit if needed, and click Submit. You're in control of every send.
  • 5
    Track results. The activity log and queue give you a full picture of what's been processed, what succeeded, and what needs follow-up.

🚀 Quick Start Guide

From a fresh account to your first campaign in under 10 minutes.

Step 1 — Create a Sender Profile

Go to Sender Profiles in the sidebar and click + to create your first profile. Fill in your name, email, phone, and company. This is the information that gets pre-filled into contact forms on your behalf.

💡
You can have multiple sender profiles — one per sales rep, territory, or brand. Campaigns are assigned to a specific profile.

Step 2 — Create a Campaign

From the Dashboard, click New Campaign. Give it a name and assign it to your sender profile. The campaign is your container for a list of target companies and the message templates you want to send them.

Step 3 — Add Records

You have two options:

  • A
    Import a CSV. Go to the campaign's Queue tab and click Import CSV. Your file needs at minimum a company_name and website_url column. See the CSV Format Reference for all supported columns.
  • B
    Pull from the Database. Go to the Database page in the sidebar. Search by industry, state, or city — then select records and click Pull to add them directly to your campaign.

Step 4 — Write Your Templates

Go to the Templates tab inside your campaign. Write at least one message. Keep it concise — 3 to 5 sentences works best. Use {{company_name}} and {{city}} to personalize automatically.

Step 5 — Run the Campaign

From the campaign overview, click Start. Loylty will begin processing records in the background. You can monitor progress on the Dashboard or watch the queue update in real time under the Queue tab.


👤 Sender Profiles

A sender profile stores the contact information that gets pre-filled into contact forms. Each campaign is linked to one sender profile, so you can run separate campaigns for different brands, regions, or team members.

Contact Fields

Full Name REQUIRED
Mapped to name fields
Your first and last name, or a sales rep's name. This appears in the "Name" field on contact forms.
Email REQUIRED
Mapped to email fields
The reply-to email address. This is where contractors will respond when they reply to your outreach.
Phone OPTIONAL
Auto-formatted
10-digit US phone number. Loylty formats it automatically (e.g. (555) 555-5555) to match most form expectations.
Company OPTIONAL
Mapped to company fields
Your company or brand name. Appears in "Company" or "Organization" form fields.
Website OPTIONAL
Mapped to website fields
Your website URL. Improves credibility when contact forms include a website field.
Address / City / State / Zip OPTIONAL
Mapped to address fields
Used when forms include address or location fields. Having a local address improves trust — especially when targeting contractors in a specific region.

AI Form Detection

Contact forms vary enormously in their field labels and structure. Standard CSS selectors catch the common patterns (name, email, message), but unusual fields — "Your Industry", "Project Budget", "How did you hear about us?" — are missed without AI assistance.

When an Anthropic API key is added to your sender profile, Loylty uses AI to read the visible form and map unknown fields to the best available value from your sender info. This dramatically improves fill rates on custom or complex forms.

🧠
Get your API key at console.anthropic.com. AI detection is per-profile — you can enable it on some campaigns and not others.

CAPTCHA Auto-Solve

Some contact forms include CAPTCHAs that block automated browsers. With a CAPTCHA solving API key configured, Loylty automatically solves them instead of routing the record to your manual queue.

CAPTCHA solving costs approximately $1–3 per 1,000 solves. For most campaigns the cost is negligible.

🤖
Without a CAPTCHA key, records with CAPTCHAs are automatically marked Needs Manual so you can handle them yourself.

Email Fallback (SMTP)

When a contact page has no form but lists a mailto: email address, Loylty can send your message directly via email instead of skipping the record. Configure your outgoing mail server (SMTP) to enable this.

Works with Gmail, Outlook, Yahoo, and any provider that supports SMTP. For Gmail, use a 16-character App Password generated at myaccount.google.com rather than your regular password.

ProviderSMTP HostPort
Gmailsmtp.gmail.com587
Outlook / Hotmailsmtp-mail.outlook.com587
Yahoosmtp.mail.yahoo.com587

Residential Proxy

Some websites detect and block data center IP addresses. A residential proxy routes your browser traffic through real residential IPs, making your automated sessions indistinguishable from normal web browsing.

Recommended for campaigns over 500 submissions/day or in industries where websites are more likely to block bots. Compatible with IPRoyal, Smartproxy, Brightdata, and any provider that supports username/password proxy authentication.

⚠️
The proxy is used selectively on sites that exhibit bot-detection behavior — not on every request. Enabling it doesn't slow down unprotected sites.

📋 Campaigns

A campaign is the core unit of work in Loylty. It ties together a list of target companies, a sender profile, and a set of message templates. You can run multiple campaigns simultaneously — by geography, niche, or offer.

Importing Records

From inside a campaign, go to the Queue tab and click Import CSV. Loylty accepts standard comma-separated files. Column headers are matched case-insensitively, so Company Name and company_name both work.

💡
You can import the same CSV into multiple campaigns, or import additional records into an existing campaign at any time. Loylty skips duplicates automatically.

CSV Format Reference

Required columns are marked REQUIRED. All other columns are optional but improve fill rates and personalization.

Example CSV
company_name,website_url,contact_page_url,contact_email,city,state,category
"Acme Fence Co","https://acmefence.com","https://acmefence.com/contact","info@acmefence.com","Austin","TX","Fence Contractor"
"Southwest Fencing","https://swfencing.com","","","Phoenix","AZ","Fence Contractor"
ColumnDescription
company_name REQUIREDThe business name. Used in template tags and form fields.
website_url REQUIREDThe company's main website. Used to find the contact page if none is provided.
contact_page_urlDirect URL to the contact page. If provided, Loylty goes here first instead of crawling the site.
contact_emailA known contact email. Used for email fallback if no form is found.
facebook_urlFacebook business page URL. Used as a fallback contact method.
cityCity name. Enables the {{city}} template tag for local personalization.
state2-letter state abbreviation (e.g. TX). Enables the {{state}} tag.
categoryBusiness type or vertical. Enables the {{category}} tag.

Running a Campaign

From the campaign overview, click Start to begin processing. Loylty runs records in the background — you can navigate away, work on other campaigns, or close the tab without interrupting it.

Use Pause to stop processing after the current record completes. Resume picks up from where it left off. Records that are already in progress when you pause will complete before stopping.

💡
Concurrent browsers and submission delay are configured in Settings. Start conservatively (3 browsers, 3–5 second delay) and increase only if your connection is stable.

✍️ Message Templates

Templates are the outreach messages that get filled into the "Message" field of each contact form. A well-written template is concise, specific, and gives the contractor a clear reason to respond.

Template Tags

Tags are replaced with real data from each record at send time. This lets one template feel personalized across thousands of companies.

TagReplaced WithExample Output
{{company_name}}The company's nameAcme Fence Co
{{city}}The company's cityAustin
{{state}}The company's stateTX
{{category}}Business type/verticalFence Contractor
{{website_url}}The company's websitehttps://acmefence.com
Example template using tags
Hi {{company_name}} team,

I'm reaching out because we work with {{category}}s across {{state}} and
I think there might be a great fit here.

We supply commercial-grade fencing materials at contractor pricing —
typically 15–20% below retail. Would love to connect and see if we
can help {{company_name}} save on your next job.

– [Your Name]

Message Variations

You can create multiple message templates within a single campaign. Loylty rotates through them evenly — so if you have 3 templates and 300 records, each template gets used roughly 100 times.

Variation prevents your outreach from looking mass-produced if multiple contractors in the same area compare notes. It also lets you A/B test different angles or offers over time.

💡
Aim for 2–4 variations per campaign. More than that and the differences become negligible. Give each variation a distinct angle, opening line, or call to action.

AI Personalization

When AI mode is enabled on a campaign, Loylty reads visible content from the contractor's website — their specialty, recent projects, location — and uses it to write a personalized opening sentence for your message.

The result: outreach that references their actual business instead of generic tags. Response rates improve significantly when the recipient can tell the message was written specifically for them.

⚠️
AI Personalization requires an Anthropic API key in your sender profile and slightly increases processing time per record. Best used on high-value target lists where personalization ROI is highest.

🗃️ The Database BETA

The Loylty database contains 1.6M+ contractor businesses across the United States, pulled from public sources and updated regularly. It's available on Starter and Pro plans for finding new prospects without building your own list.

Search by industry vertical, state, city, or keyword. Filter by whether the business has a known email, phone number, or Google rating. Sort by rating or review count to prioritize the most established businesses.

Pulling Records into a Campaign

Once you've filtered to a set of prospects you want to target, select them using the row checkboxes or use the count input to pull a specific number from the current filter. Then choose the destination campaign and click Pull Records.

Loylty pulls up to 500 records per pull. For larger lists, pull in batches or use different filter combinations across multiple pulls.

💡
Records already in your campaign are automatically skipped on re-pull so you won't create duplicates by accident.

Beta Limitations

The database is in active development. Current known limitations:

  • Some category names have duplicates (e.g. "Roofer" and "Roofers") — being cleaned up
  • Geographic coverage is stronger in major metro areas than rural regions
  • Contact page URLs and emails may be outdated for businesses that have changed their website
  • Not all businesses have phone, email, or Google rating data

We're continuously expanding coverage and cleaning data. If you need records for a specific region or vertical that seems thin, contact us — we prioritize based on demand.


📊 Queue & Statuses

Every record in a campaign has a status that reflects where it is in the outreach process. The Queue tab lets you filter, manage, and take action on records by status.

StatusMeaningWhat to do
New Hasn't been processed yet. Waiting in line to run. Nothing — it'll process when you start or resume the campaign.
Completed The form was found, filled, and submitted successfully. Nothing required. This is the happy path.
Needs Manual The form was found but couldn't be submitted automatically — requires human action. Click Open to review in the browser, then submit manually.
Skipped You chose to skip this record during manual review. No action needed. Retry if you change your mind.
Error Something went wrong during processing — site was down, timeout, browser crash. Use Retry All Errors to reset these back to New for another attempt.
No Form Found Loylty crawled the site but couldn't find a contact form anywhere. Check the URL manually. Some sites use third-party form tools that aren't crawlable.
No Contact The website returned no usable contact method — no form, no email, no Facebook. No action available. This business may have a broken or missing contact page.
Dead Website The website was unreachable — domain may be expired or server is down. Retry after some time or remove the record.

Handling Needs Manual Records

Records land in Needs Manual when Loylty successfully opened the contact page and pre-filled the form, but can't complete submission automatically — most often due to CAPTCHAs, unusual form structures, or bot detection.

Click Open next to any Needs Manual record to open the browser window directly to the pre-filled form. Review the fields, make any edits, solve the CAPTCHA if present, and click Submit yourself. Then mark it Done in the queue.

💡
Adding a CAPTCHA solving API key to your sender profile significantly reduces the number of records that land here.

Retrying Failures

Use the ↺ Retry All button when viewing any error-type status filter (Error, No Form Found, Dead Website, Skipped, Needs Manual). This resets all matching records back to New so they run again on the next campaign start.

Useful after fixing a configuration issue, adding a CAPTCHA key, or retrying sites that were temporarily down.


⚙️ Settings

Performance Tuning

Two knobs control how aggressively Loylty processes records:

Concurrent Browsers
Range: 1–10, Default: 3
How many browser sessions run in parallel. More browsers = faster processing, but also more load on your network and a higher chance of triggering IP-based rate limits on targeted websites. Keep at 3 unless you have a fast, stable connection and a residential proxy configured.
Delay Between Submissions
Range: 1–10 seconds, Default: 3s
How long Loylty waits between form submissions. Longer delays look more human and reduce bot detection, but slow overall throughput. 3–5 seconds is the recommended range for most campaigns.
⚠️
Setting concurrency above 5 without a residential proxy significantly increases the risk of your IP being blocked by targeted websites. Start low and increase gradually.

Business Information

The business info fields in Settings are for your internal records only — your legal name, DBA, address, EIN. This information is never shared with anyone or pre-filled into outreach forms. Outreach sender info lives in Sender Profiles.


💳 Billing & Plans

PlanDaily LimitMonthly Est.Price
Starter100 submissions/day~3,000/month$99/mo
Pro300 submissions/day~9,000/month$299/mo
Agency500 submissions/day~15,000/month$499/mo

All plans include unlimited campaigns, template rotation, the activity log, and email support. The Database is available on Starter and above (currently in beta). Annual billing saves 20%.

To upgrade, downgrade, or cancel, go to Billing in the sidebar and click Manage Plan. You'll be taken to the Stripe customer portal where you can make changes instantly. Cancellations take effect at the end of the current billing period — you keep full access until then.

Questions about your plan or billing? Email support@loylty.io and we'll get back to you within one business day.

FAQ

Does Loylty ever submit forms without my approval?

No. Never. Loylty fills forms and queues records for your review, but the final submit is always a human action. This is a core design principle and will not change.

What happens if a website doesn't have a contact form?

Loylty tries multiple approaches in order: the provided contact page URL, crawling the site for a contact page, a mailto link. If none are found, the record is marked No Form Found. If you have SMTP configured and the site has a mailto link, Loylty sends via email instead.

How many records can I have in a campaign?

There's no hard limit on records per campaign. Practically, most users run campaigns of 200–2,000 records per batch. Larger lists are best broken into multiple campaigns by state or category for easier tracking and template tuning.

Can I run multiple campaigns at the same time?

Yes. All running campaigns share the concurrent browser pool configured in Settings. If you have 3 browsers and 2 running campaigns, they compete for those 3 slots. Increase concurrency in Settings if you want to run several campaigns in parallel without them slowing each other down.

Why does a record keep landing in Needs Manual even after I retry it?

The most common causes are: a CAPTCHA that isn't being solved (add a CAPTCHA key to your sender profile), bot-detection JavaScript that blocks the browser (add a residential proxy), or a form that requires a non-standard interaction like a file upload or multi-step process (these require manual handling).

Is there an affiliate program?

Yes. You earn 20% monthly recurring commission for every paying customer you refer — for as long as they stay subscribed. Find your unique referral link in the Affiliates section of the app.


🔧 Troubleshooting

Campaign starts but records immediately go to Error

This usually means the browser couldn't load the target URL. Check that the website URLs in your CSV are valid and reachable. Try opening a few of them manually. If they work in your browser but not in Loylty, the site may be using bot detection — add a residential proxy to your sender profile.

All my records are No Form Found

This can happen when your CSV's website_url column contains homepages but the contact page is buried under a non-standard URL. Try adding a contact_page_url column with direct links to the contact page for each company. The Database records include contact page URLs where known.

The Database industry dropdown shows only a few options

The dropdown loads verticals from the database. If it appears to be loading slowly or showing limited results, try refreshing the page. If the issue persists, contact support.

I'm getting a lot of CAPTCHA failures

Add a CAPTCHA solving API key to your sender profile. Records with unsolvable CAPTCHAs route to Needs Manual rather than failing outright — so you can still submit them manually. Long-term, a residential proxy reduces the frequency of CAPTCHAs being triggered in the first place.

Template tags aren't being replaced

Check that your CSV columns match the expected tag names exactly: company_name, city, state, category, website_url. If a column is missing or blank for a record, the tag is left empty in the message — so a template with Hi {{company_name}} becomes Hi if the column is absent. Fill in the data or remove the tag from the template.

Still stuck?

Email support@loylty.io and describe what you're seeing. Include the campaign name, which status the records are landing in, and a sample URL from your list if relevant. We typically respond within one business day.