Portfolio / B2B lead generation and sales automation platform
A complex operation, one path to a quote.
Hudson Oils sells cooking oil wholesale to restaurants, chains, hotels and importers: by the case, by the pallet or by the container, with used oil collected on the same visit. We designed and built the platform that explains that offer without overwhelming the buyer, and turns each visit into a quote request that reaches the CRM with all the context sales needs to answer.

01The challenge
Six sales journeys in one business.
Hudson Oils' offer does not fit in a catalog: nationwide supply to commercial kitchens, quotes by the case, pallet or full truckload, export to the Caribbean and Central America, used oil collection, private label and technical questions about formats and specifications. Every buyer arrives with one of those questions, and they don't all speak the same language: a restaurant thinks in fryer baskets, an importer in containers.
The site had to explain all of it with technical precision and without overload, and take every intent to a well-qualified quote. On the other side, the sales team needed each request to reach the CRM with enough context to answer without repeating discovery on the phone.
What had to be solved
- 01Position a specialist, trustworthy wholesaler
- 02Make the 35 lb format the center of the product
- 03Separate domestic supply, export and collection
- 04Capture useful sales data from the first contact
- 05Bring forms, chat and voice into GoHighLevel
- 06Update products without redesigning pages
Our role
Digital strategy, information architecture, visual system applied to the web, design and development in WordPress with Elementor and a custom plugin, GoHighLevel integration, sales automation, transactional email, voice and chat agent, and technical SEO.
02The rule
What shaped every page.
Generate demand, not display a catalog.
A passive catalog shows products and waits. Here every page combines three things: content that teaches, operational proof —a smoke point, a pallet configuration, a transit time— and a clear next step. No page is a dead end.
The next step keeps the intent. If the buyer clicks to quote from the soybean oil page, the form already knows they're asking about soybean. Someone who arrives with context shouldn't have to explain it again.
TeachProveQuote
03The architecture
Three journeys that don't mix.
Navigation was cut down to the essential decisions: products, format, export, collection, company, contact and quote. 12 main routes, with legacy URLs 301-redirected so nothing already ranking was lost.
Five oils, one format.
A catalog hub and one page per oil —soybean, canola, sunflower, corn, extra virgin olive—, all built around the same 35 lb case. A restaurant compares grades by the job they do in the kitchen, not by trade name.
Built for the importer.
A route of its own for the Caribbean and Central America: 20 and 40 ft containers, consolidated loads out of South Florida, ports of discharge and transit times by market, and export paperwork explained before the buyer asks.
The whole life of the oil.
Used oil collection has its own page and its own box on the quote form. Ticking it prices supply and pickup together: one supplier, one schedule, one set of paperwork.
04The site in numbers
What the buyer settles before writing in.
Content and capture figures, counted on the published site. They are not performance results: they describe how much context arrives with each request.
- 5
- oils with their own spec page
- 35 lb
- one anchor format for the whole range
- 1,200
- cases per full truckload, 60 per pallet
- 14
- fields on the quote request
- 5
- sales workflows designed in GoHighLevel
05The site
From first look to quote.

The offer in one line —commercial grade oil, wholesale and delivered nationwide— and below it the operational proof in figures: the format, the pallet load, the full truckload and the certificate of analysis per lot.

Five oils, one case. Each card says what job the oil does and its smoke point, and links to the full spec page.

The 35 lb case as the center of the product: why it pours without splashing, why one person can carry it and how many fit on a pallet, with its specification alongside.

Each page opens with the oil's job in the kitchen, its key data and two ways out: quote this oil or go to the specification.

Typical analysis, fatty acid profile and format in tables you can compare at a glance. The data comes from structured product fields: edited once, reflected on the card, the listing and the page.

The importer's route talks in containers, markets and transit times, and its button asks for an export quote, not a generic one.

Ports of discharge and indicative transit by market, grouped by region. It's the first question an importer asks, answered before the call.

Used oil collection is sold as part of supply: same visit, same schedule. Its page explains the service in four steps and leads to the same quote.

14 fields in three steps —who you are, what you need, anything else— with what happens after sending alongside. This is the form that feeds the CRM.

The transactional template the buyer receives: their request summarized, the one-business-day response commitment and the three next steps. Rendered with sample data in place of the merge fields.
06Visual system
Industrial precision, not commodity.
Primary · Buttons · Tables · Navigation
- HEX
- #002D6E
- RGB
- 0 · 45 · 110
High-presence bands · Footer
- HEX
- #001B42
- RGB
- 0 · 27 · 66
Informational accents · Labels
- HEX
- #0B4FA0
- RGB
- 11 · 79 · 160
Action · Emphasis
- HEX
- #F2A900
- RGB
- 242 · 169 · 0
Body text
- HEX
- #10192B
- RGB
- 16 · 25 · 43
Secondary text
- HEX
- #5A6779
- RGB
- 90 · 103 · 121
Alternate sections
- HEX
- #F4F7FB
- RGB
- 244 · 247 · 251
Borders · Tables · Dividers
- HEX
- #D6DEE9
- RGB
- 214 · 222 · 233
07The principles
Product first, trust without hype.
Commodity distributors tend to look like the next one: stock photos, corporate language and generic promises. The system goes the other way: operational data up front.
Archivo for data, Barlow for reading.
Archivo sets headlines, navigation, buttons and figures with the weight of a spec sheet; Barlow handles body copy and specifications. Short headlines, big numbers, scannable tables.
Nothing that isn't documented.
The copy avoids certifications, customers or promises the business can't back up. Trust comes from the published specification, the logistics spelled out and a concrete response time.
Buyers quote from their phones too.
Minimum touch targets, full-width forms and a type scale that adapts. Inline SVG icons, light and accessible, instead of a whole icon library.
08The integration
From a visit to an opportunity in the CRM.
The full path, from the click to sales follow-up. Every submission leaves three traces: the webhook to the CRM, the WordPress record as a backup and the email alert to the sales owner.
Website
Service or product pageForm, chat or voice
Capture with contextHTTPS webhook
Validated deliveryGoHighLevel
Contact and opportunityEmail
Confirmation and alertSales
Written quote
- 01
Arrives with an intent
Through search, direct or a campaign, the buyer lands on a product or service page. That page's call to action carries the product or interest forward.
- 02
Asks for a quote
The form collects 14 details: business, business type out of 9 options, oils, volume in 7 bands, domestic or export supply, collection and consent. reCAPTCHA v3 is verified server-side.
- 03
Enters the CRM
The webhook creates or updates the contact using email and phone to avoid duplicates, normalizes the fields and applies tags for source, product, export and collection.
- 04
The opportunity opens
The opportunity starts in “New lead”, is assigned to the sales owner and creates a task due within one business day.
- 05
Everyone knows
The buyer gets the confirmation with their request summarized; sales gets the internal alert with every detail and a link to the contact.
- 06
Follow-up without gaps
A reminder if the opportunity is still untouched when the deadline passes, a second notice and reassignment if nothing happens. The sequence stops as soon as there's a reply.
No workflow sends prices. The project's rule is that price and dates come from the sales team in a written quote.
09The CRM
A data model built to sell.
Every form field has its place in GoHighLevel: the standard ones —name, company, email, phone, city— and the custom ones that qualify the opportunity: business type, oils requested, estimated volume, supply type, collection interest, notes, consent with its timestamp, source and landing page.
The pipeline follows the real cycle of a wholesale sale: new lead, qualified, quote in preparation, quote sent, follow-up and first delivery scheduled, with an exit to nurture for what doesn't close. Questions about existing orders or billing don't enter the new business pipeline: the contact form classifies them and routes them elsewhere.
Workflows designed
- 01New quote request
- 02General contact, sorted by topic
- 03Lead handed over by the chat or voice agent
- 04Follow-up when there's no reply
- 05Quote sent and reminders
10The agent
An AI that takes details and doesn't promise prices.
- AvaThanks for calling Hudson Oils, this is Ava. Are you calling about cooking oil supply, a quote, or used oil collection?
- CallerI run two restaurants and want to know what a case of canola costs.
- AvaOur sales team prepares pricing in writing, based on volume and delivery. Roughly how many cases do you go through a month, and in which city?
- CallerAbout thirty a month, in Austin. And we'd like the used oil picked up.
- AvaGot it: canola, about thirty cases a month in Austin, with collection. Sales will get back to you within one business day.
Ava handles the front line by phone and chat: answers the basics from a controlled knowledge base, qualifies the request and drops it in the CRM with a summary. When asked for a price, she doesn't make one up: she takes the details so sales can quote.
11The limits
AI as an intake layer, not a salesperson.
An agent that quotes from memory is a commercial risk: a price misspoken on the phone becomes a commitment. That's why Ava's instructions, for voice and for chat, are as explicit about what she doesn't do as about what she does.
She collects nine details —name, company and business type, contact, request type, oils, volume, location or port, collection interest and context— and summarizes the conversation before closing. The summary travels to the CRM with the contact, so sales opens the opportunity knowing what was said.
What the agent won't do
- 01Quote prices, discounts, credit or lead times
- 02Invent certifications, facilities or customers
- 03Take payment details
- 04Stray beyond cooking oil and collection
- 05Answer without a verified answer: it goes to sales
12The build
A custom plugin that turns WordPress into a system.
The Hudson Oils – Site v3.1.0 plugin turns WordPress into a managed catalog: it renders the grid, the listing and each product page from structured fields —ACF, with post meta as fallback—, generates breadcrumbs, product structured data and the 35 lb format table, and pre-fills the quote with the chosen oil. A spec changes once and shows up the same everywhere.
Pages are generated with Python from Elementor JSON, so the site can be rebuilt and deployed reproducibly instead of depending on whatever someone dragged in the editor. Hello Elementor as the base keeps the layer light.
Forms are built for a cached site: the nonce is refreshed before every submission so a cached page doesn't fail silently, reCAPTCHA v3 is verified server-side with a configurable threshold, and if Google doesn't respond during verification the lead isn't thrown away. Updating a product purges the Elementor and LiteSpeed caches. Quote and phone clicks are pushed to the dataLayer.
Technical SEO
Per-page titles, descriptions and Open Graph with Rank Math, breadcrumbs and schema for products and FAQs, semantic catalog URLs and 301 redirects from legacy routes.
13The handover
What was built and what gets measured next.
The platform is live at hudsonoils.com with its twelve routes, the managed catalog and the quote request connected to GoHighLevel. The architecture can measure the whole funnel, from the click on “Get a quote” to the won opportunity.
What isn't there yet is said just as plainly. Form, CRM and revenue events need their final setup in Google Tag Manager, GA4 and GoHighLevel, and we don't publish conversion, lead or pipeline figures until they're measured with a source. When they exist, this case will show them with their period.
Delivered
- 01Digital strategy and information architecture
- 02Visual system applied to the web
- 03Design and development in WordPress and Elementor
- 04Custom catalog and specification plugin
- 05Reproducible page generation in Python
- 06Qualified quote and contact forms
- 07GoHighLevel integration: fields, tags and pipeline
- 08Confirmation, alert and follow-up workflows
- 09Transactional email with merge fields
- 10Voice and chat agent instructions
- 11Technical SEO and measurement events
14The value
What changes when the request arrives complete.
Less discovery, more quoting.
In wholesale, the first call is usually spent asking the basics: which oil, how much, where, for what kind of business. When that already comes with the request, sales starts with the quote.
The site explains, the form and the agent qualify, and the CRM keeps order. Each part does its job and hands the buyer to the next without losing what they already said.
ClearQualifiedConnected
beleafdesign
Do your leads arrive with context, or just a name and an email?
If your sales team spends the first call asking the basics, we can design the path that qualifies before contact and connect it to your CRM so nobody has to repeat anything.
Let's talk about your project