A complete guide for farmers
MilkShelf gives your farm a custom signup page at yourfarm.milkshelf.com β this is your farm's permanent public link. Share it anywhere: your website, Facebook, a text message, or a QR code flyer on your fridge. Customers use it to subscribe, manage their subscription, and check for extra jars. You get a private dashboard to manage everything β orders, labels, capacity, emails, and more.
Here's the basic flow:
MilkShelf includes built-in card billing through Stripe. Customers enter a card when they sign up and are charged automatically on their pickup day β no chasing payments, no Venmo requests. You always net your full jar price; a small processing fee is passed to the customer. If a customer prefers to pay cash, that option is available too and their pickups are tracked the same way.
When someone visits your link, here's what they see:
They enter their phone number first. If they've signed up before, their info is pre-filled so they can make changes. If they're new, a blank form appears.
They choose a pickup day from your active days and select how many jars. Days that are full show as "(FULL)" and can't be selected. The jar dropdown adjusts based on what's available that day.
They choose weekly or every two weeks. For biweekly customers, the system automatically manages scheduling to keep your weekly milk demand consistent β see below.
When a biweekly customer signs up, the system checks whether your existing biweekly customers are balanced. If they are, the new customer gets free choice of day and start date. If there's an unpaired customer, the system assigns the new customer to that customer's off week β so you always fill the same number of jars every week, regardless of who's biweekly. The new customer sees a note explaining why their day was pre-selected. If it doesn't work for them, they're directed to contact you directly. Jar counts are matched to the unpaired customer's jar count to keep things even.
If you'd rather let biweekly customers pick whatever day and start date they want β even if it leaves your weekly demand uneven β turn off the Auto-pair Every-2-Week Customers toggle in Settings β Pickup Days & Capacity.
They choose when to get pickup reminders β the night before at 6 PM, the morning of at 8 AM, or no reminders.
Your dashboard has five tabs across the top β Today, Customers, Schedule, Settings, and Payments. The Today tab is your morning routine β everything you need to fill jars and get them out the door:
Shows every active customer picking up today, their jar count, and any notes. Customers on vacation are automatically hidden. The total jar count is shown in the header.
Pick a collection date and tap "Generate Labels" to create labels for any pickup day. Labels download as a PDF ready to print on a standard thermal label printer. Each label shows the customer name, jar count, farm URL, and collection date. Vacation customers are automatically excluded.
Filled more jars than you have orders? Post the extra count here. Customers visiting your portal see a banner: "3 extra jars available today β help yourself while they last!" You can customize this message and it shows a timestamp so customers know it's fresh.
When a customer picks up their milk, all their jars are assumed to be out. Open the Jar Returns accordion, tap any jar circle to mark it π’ when it comes back, then tap Save. Jars still out show as π .
If a customer has more than 2Γ their jar subscription outstanding before their next pickup, MilkShelf automatically sends them a reminder email β and sends you a summary so you know who to expect jars from.
Use the day dropdown to switch between pickup days. Jar tracking can be turned on or off with the toggle in the Jar Returns header.
You control which days you offer pickup and how many jars are available each day. Only the days you check will appear on your customer portal β if you only do Wednesday and Saturday, those are the only options customers see.
Check the box next to each day you offer pickup and enter the jar limit. For example: Wednesday β 20 jars, Saturday β 30 jars. Unchecked days are hidden from customers.
As customers sign up for a day, the available count goes down. When a day hits zero, it shows as "(FULL)" on the signup form and new customers can't select it. If someone cancels or pauses, that capacity opens back up automatically.
Set what "one jar" means for your farm β half gallon, quart, gallon, etc. This shows on the signup form as "One jar is a half gallon" so customers know what they're ordering.
Enter what you charge per jar. This shows on your customer portal so customers know what to expect before signing up, and is included in their welcome email when they subscribe.
If you charge a deposit for jar returns, enter the amount here. It shows alongside your jar price on the portal. The deposit is the incentive that keeps jars coming back β jar return tracking helps you see exactly who still has jars out so you know where your deposits stand.
Dashboard β Settings tab β Pickup Days & Capacity, and Pricing & Deposits
The Schedule tab gives you a 4-week forward view of all your pickup days β so you can see at a glance how full each day is, which customers are coming, and where you have open slots.
Open your dashboard and tap the Schedule tab. It loads automatically from your current customer and capacity data β no setup needed beyond configuring your pickup days in Settings.
Each pickup day appears as a card showing the date, how many jars are expected out of your capacity, and a fill bar. Green-bordered cards have open slots β meaning off-week or vacationing customers have freed up space. Orange-bordered cards are full. Today's pickup is highlighted with a "TODAY" badge.
Tap any day card to expand the full customer list for that pickup, including jar counts and pickup frequency. Customers who are off that week (biweekly schedule) or on vacation are shown as tags below the card so you know exactly why a slot opened up.
When you have extra milk beyond your regular subscriptions, enter the available quantity in your MilkShelf dashboard. A banner automatically appears on your customer portal showing how many extra jars are available, with a timestamp so customers know it's current.
Enter the number of extra jars and optionally customize the message. When you set it to 0, customers see "No extras today β check back tomorrow!" so they don't have to ask. If you haven't customized the message, the banner just hides when the count is 0. This is great for days when you have more milk than usual or when customers are on vacation and you have surplus.
Dashboard β Today β Excess Jars
Instead of turning new customers away when you're full, you can enable a waitlist with a single toggle in your dashboard. Once on, customers visiting your signup page will see a "Join Waitlist" button. Here's how it works:
From your dashboard, you can view the waitlist, reorder priorities, and remove people. The whole cascade process is automatic β you don't have to manage it.
Dashboard β Customers β Waitlist
Keep track of how many jars each customer has at home. Open the Jar Returns accordion on your dashboard, tap the circles as you load your dishwasher each night, and hit Save. Takes about 30 seconds.
Today's pickup customers are listed with one circle per jar. Orange means the jar is still at the customer's place. Tap it to mark it returned (green). Switch days with the dropdown to catch up on any day you missed.
If a customer has more than twice their subscription jar count outstanding, MilkShelf automatically sends them a friendly reminder the day before their next pickup. You get a summary email too so you know who to expect jars from.
Dashboard β Today β Jar Returns
Look up any customer by name or phone number. From the search results you can pause, reactivate, or delete their subscription. Paused customers don't count toward your capacity and don't receive pickup reminders.
For customers who can't use the online form (or prefer not to), you can add them directly from the dashboard. Enter their name, phone, email, pickup day, frequency, and jar count.
Every customer has two notes fields. Customer Notes is anything the customer wrote on their own signup ("Special instructions, preferences, etc.") β they can see and edit this on the portal. π Private Farmer Notes is yours alone, with a yellow background so you can't mix them up β customers never see it and are never notified when you change it. Use it for payment notes, jar deposit status, delivery preferences, or anything else. Both fields appear on Today's Orders and Upcoming Orders so the relevant info is always in front of you on pickup day.
Export your full customer list as a CSV file. Useful for your own records or for importing into other tools.
Dashboard β Customers tab
MilkShelf sends emails on your behalf, branded with your farm logo. You don't have to write or send anything β it's all automatic.
Sent immediately when a customer signs up or updates their subscription. Shows their pickup day, jar count, frequency, and a link to your Google Maps directions. You can add a custom message that appears in this email (e.g., "Milk is available starting at 7am. Please bring your own cooler bag.").
Sent automatically before each pickup day. Customers choose whether they want the reminder the night before at 6 PM, the morning of at 8 AM, or no reminders. You can customize the reminder text and use placeholders like {customerName}, {pickupDay}, and {jars}.
Need to tell your customers something? Write a subject and message and send to everyone, a specific pickup day, your waitlist, or a custom group. Great for holiday closures, schedule changes, or seasonal updates.
Send yourself test versions of the confirmation, update, and reminder emails to see exactly what your customers will receive before you go live.
If your subscriptions exceed your capacity on any day, you get a daily alert email at 8 AM showing which days are over and by how many jars.
Dashboard β Settings β Email Settings
Your customer portal at yourfarm.milkshelf.com looks and feels like your farm, not like generic software.
Upload your logo and it appears on the customer portal and in every email. PNG with a transparent background works best. If you don't have a transparent version, the dashboard links to a free tool to remove the background.
Upload a screenshot or photo showing exactly where customers should pick up. This shows on the customer portal below the signup form.
Enter your full address and customers get a "Directions to Our Farm" link that opens in Google Maps with turn-by-turn navigation.
Post a message that appears on your customer portal. Useful for seasonal notes, holiday hours, or anything you want customers to see when they visit your page.
Customers can send you a message directly from the portal if they have questions or special requests. The message goes straight to your email.
Connect Stripe to collect payments automatically β customers are billed at signup and on a recurring schedule without any manual follow-up. Prefer to handle payments yourself? You can also add a link to Venmo, Square, or another payment page as a fallback.
Dashboard β Settings β Farm Settings
MilkShelf generates a printable flyer with a QR code that links directly to your customer portal. Print it and tape it anywhere customers will see it β your farm fridge, barn door, cooler, or pickup area.
Customers scan the QR code with their phone and it takes them straight to your signup page. No typing, no searching β just scan and subscribe. It's the fastest way to get new customers signed up on the spot.
Dashboard β Settings β QR Code Flyer
Generate jar labels for any pickup day in seconds. Labels are designed to print on standard thermal label printers and include everything your customers need to identify their order.
Each label shows the customer's name, jar count, your farm URL, and the collection date. Customers on vacation are automatically excluded so you never print a label for someone who isn't picking up.
Labels download as a PDF formatted for thermal label printers. Open the PDF and print directly β no resizing needed. If you don't have a thermal printer, the PDF works on regular paper too and can be cut apart.
Dashboard β Today β Labels
Going to a family reunion, conference, or just taking a week off? Set a Farm Vacation window in Settings β Farm Vacation. The night before your vacation starts, MilkShelf emails every active customer to let them know there'll be no pickups during the window β with a personal message from you if you wrote one β and automatically pauses every card customer's Stripe subscription so nobody is charged for weeks they aren't getting milk. The night your vacation ends, everything resumes: subscriptions un-pause, reminders restart, and your next pickup day runs as normal.
Biweekly customers whose off-week falls during your vacation are handled correctly β they won't get a duplicate "vacation" email or a Stripe pause they didn't need. Customers who are already on their own personal vacation through your absence are left alone so they don't get unpaused prematurely.
Customers can set vacation dates on the portal. During their vacation, they're automatically excluded from today's orders and don't receive pickup reminders. Their subscription stays active β they just skip those weeks. When the vacation ends, everything resumes automatically.
Customers can pause their subscription from the portal, or you can pause them from the dashboard using Search Customer. Paused customers don't count toward your capacity and don't get reminders. They can reactivate anytime.
MilkShelf can collect jar payments directly from your customers via card. When you connect your bank account in the Payments tab, customers see a "Card" or "Cash" option when they sign up. Card customers are charged automatically on whatever schedule you choose β no invoicing, no chasing payments.
When a customer pays by card, processing fees (Stripe's ~2.9% + $0.30, plus MilkShelf's 1.5%) are added on top of your jar price at checkout β you never see a deduction. For example, if your jar is $8.00, the customer pays $8.69. You receive $8.00 every time, deposited directly to your bank account.
Set how customers are charged in Payments β Billing Mode:
Per Pickup β billed every pickup day, weekly or biweekly. Best for direct-sale farms where the charge ties to a physical pickup.
Monthly Herdshare β a flat per-share charge on the same day each month (1st through 28th). Unlocks when Herdshare Mode is on.
4-Week Herdshare β bills every 4 weeks from each shareholder's first distribution. Keeps shareholders on a steady 28-day cycle.
On per-pickup billing, customers are charged on their first pickup day, then on the same day every week (or every two weeks for biweekly customers). If someone signs up Monday for a Thursday pickup, their first charge is that Thursday β not Monday. This keeps billing and pickups in sync.
Example: Jane signs up Monday March 16th for a Thursday pickup. Her first charge hits Thursday March 19th. After that she's charged every Thursday β March 26th, April 2nd, and so on.
Card customers see a "Manage Card Payments" button on your portal. It opens Stripe's billing portal where they can update their card, view past charges, and download receipts β without involving you. You never see their card details, and they never have to call to fix a declined card.
When a charge fails (expired card, insufficient funds, etc.), a red banner appears at the top of your Today tab listing the affected customers. Stripe automatically retries the charge over the next several days. If a customer pays you another way in the meantime β cash at pickup, Venmo, anything β click "Mark as Paid" on the banner to clear the flag. The customer also shows an orange "Past due" badge in Search Customers results until resolved.
In Payments β Customer Billing Options there's a toggle: "Allow Customers to Switch to Cash." When on, card customers can cancel their card billing themselves from the portal and switch to paying you directly. Turn it off if you only want card customers and don't want self-serve downgrades.
When a card customer sets vacation dates, their Stripe subscription is automatically paused on their vacation start date and resumes on their first pickup day after vacation ends β so they're never charged for a week they're skipping. When you pause a customer from the dashboard, their subscription pauses immediately and resumes when you reactivate them.
Example: Sarah picks up every Thursday. She sets a vacation from June 5th to June 12th. Her June 5th and June 12th charges are skipped automatically. Her subscription resumes June 19th β her first Thursday after vacation ends β with no action needed from you or Sarah.
Cash is always an option. Customers who choose cash at signup are handled exactly as before β no Stripe involved, no change to your current workflow. You collect payment however you normally do.
If a customer starts the card signup process but doesn't complete checkout, they show up in the Payments tab as "Unpaid." You can resend them a payment link or follow up directly. They'll also show an orange "Unpaid" badge in the Search Customer results.
Go to the Payments tab in your dashboard and click "Connect Bank Account." Stripe will walk you through a quick setup β you'll need your routing and account number. Once connected, your status shows "Payments Active" and customers will see the card option at signup.
The Payments tab is mission control for everything money-related: who's paid, who hasn't, what's coming in, and how customers are billed. You only need to spend time here if you're using MilkShelf for card billing.
Customers who started signup but didn't complete card checkout show up here. Each row has a "Resend Payment Link" button so you can nudge them, or you can delete the entry if they're not coming through.
Pick a time window β 7 days, 14, 30, 60, 90, 180, a full year, or any custom range β and MilkShelf calculates your expected revenue across all active customers based on their current subscriptions and pickup schedules. Cash projections assume customers pick up as scheduled. Useful for planning, taxes, or deciding whether to raise prices.
A live view from Stripe of every card customer with a charge due in the next 14 days. Shows the amount, the date, and the customer. Click "Load Upcoming Charges" to refresh.
Pick how card customers are charged: Per Pickup, Monthly Herdshare, or 4-Week Herdshare. See the previous section for what each one does. Monthly Herdshare asks you to set a Billing Anchor Day (1β28) β the day of the month all shareholders are billed.
One toggle: "Allow Customers to Switch to Cash." When on, card customers can cancel their own card billing from the portal and pay you directly. When off, they have to contact you to switch.
The "Connect Bank Account" button launches Stripe Express onboarding. You'll enter your business details, routing and account number, and verify your identity β all through Stripe's hosted flow. Once finished, your status flips to "Payments Active" and customers see the card option at signup. Money is deposited directly to your bank by Stripe; MilkShelf never touches it.
Dashboard β Payments tab
We're happy to help. Whether you need help getting set up or just want to talk through how it works β reach out anytime!
Send Us a Message