月商「複数10万ドル($100K+)」のデジタルマーケティングエージェンシーを設立
月商 $225 · 創業者1人 · 従業員3人 · Columbus, OH, USA
Jamie Rossi(Founder, Jamie Rossi | American Entrepreneur)· 創業 November 2021 · 記事掲載 January 31st, 2025 · jamierossi.com · 元の記事
創業者が自分自身のアポイント獲得のために開発した仕組みが、他のエージェントにも広がり、口コミと紹介だけで成長。有料広告はリターゲティングに限定。月商は「複数10万ドル($100K+)」だが、創業7ヶ月目には月商20万ドル(約3,000万円)を達成。従業員は創業者含め4人(2025年1月記事掲載時点の自己申告)
売値の出典: 売値は確認できず(2026-10-13 取得)
I started my career in financial services, but I quickly realized there were no consistent, high-quality marketing solutions for financial professionals. Most companies only sold cold leads, which meant spending hours on the phone getting hung up on. I hated it. Since I couldn’t find a solution, I decided to learn the marketing game myself to generate leads for my own practice. But one thing led to another, and soon other agents in my office were asking me to help them book appointments too. That’s how The Appointment Setter was born—an appointment-setting service built specifically for financial professionals. What makes us different? We don’t just sell leads. We put qualified, high-intent appointments directly on our clients’ calendars, so they can focus on closing deals instead of chasing prospects. The service is so valuable that, to this day, we haven’t spent a dollar on paid advertising—our entire growth has been through word of mouth. Today, we book over a thousand appointments per week and consistently generate multi six-figure months. My image
Skills What skills did Jamie Rossi have that led to their success? No Code
I knew this was the right idea because my only other option was to go back to working for someone else—and that was never going to happen. At the time, I realized that other agents in the financial services industry were struggling with the same problem, especially during COVID. The industry had always relied on in-person meetings, but the shift to virtual made appointment setting more critical than ever. There was a massive gap in the market, and I knew I could fill it. I’ve always had an entrepreneurial mindset, even back in my days as a Marine. On weekends, I would go to garage sales around the military base and flip items on eBay, running no-reserve auctions before PayPal or Gary V-style flipping was even a thing. But this venture was different. It solved a real problem, provided massive value, and was highly scalable. It wasn’t just another hustle—it was a business that could grow exponentially while helping financial professionals focus on what they do best.
– Cold Email & Retargeting I started with a simple approach: cold email marketing. I created a lead database, pulled lists of financial advisors, and set up an email outreach system to start conversations. Once people engaged with the emails, I used retargeting ads on Facebook and Google. This multi-channel approach ensured that even if someone ignored the email, they’d still see our ads later, driving more bookings. – Automating the Process To streamline everything, I built a simple but powerful booking flow: Cold email outreach → Funnels prospects into a lead form Social media retargeting (Meta & Google) → Keeps them engaged Booking page (Calendly routing form) → Automatically schedules appointments Email & SMS follow-ups → Ensures show-up rates Follow up to collect GMB feedback. I didn’t start with a huge budget. My biggest investment was time, figuring out what worked. Initial costs: • Email software & domain setup – <$100 • Ad spend for retargeting – Around $500 to test • Calendly & automation tools – <$50/month Tools used: • GoHighLevel (CRM & automation) • Calendly (scheduling system) • Google Sheets (lead and appointment tracking) • Meta & Google Ads (for retargeting & audience building) • Zapier (automations) The first version of this system only took a few days to build. But it took several months to iterate and start to get decent results. Starting out on this journey I didn't consider it work. It was like a game that I was in control of. It was a lot of fun to implement things and watch them work (or not). The best part is I didnt need a bit team to do it. Initially I built everything out myself and eventually hired some support staff to run the day to day.
The business didn’t start with a formal launch—I was simply booking appointments for myself, but I ended up with more than I could handle. So, I started handing off extra appointments to other agents in my office. Once those agents started closing deals from my appointments, word spread fast. Their upline noticed, and before long, demand grew across the industry. By month three, we hit $30K in revenue, and by month seven, we had already crossed $200K. I definitely didn’t build this to scale from the start. In the beginning, it was basically a patched-together system that could route appointments, but it wasn’t fully optimized. Over time, I figured out how to scale properly, learning what’s important, what’s not, what’s essential, and what’s just noise.
While our first-year revenue numbers set the foundation, our real growth has come from understanding exactly what our customers need and delivering it better than anyone else. Instead of just focusing on raw numbers, we’ve refined our processes, systems, and customer experience, which has led to strong client retention and referrals. We occasionally incentivize referrals when we have extra inventory to sell, but for the most part, growth has come organically through word of mouth and consistent high-value delivery. The system has evolved over time, and below is Version 2 of the booking system that I implemented in the second year to streamline operations even further. My image
One of the biggest mistakes I see people make when starting out is getting caught up in the little things—the website, the domain name, the perfect logo, business cards. Those things matter eventually, but they’re nowhere near as important as people think. You can always change them later. Focusing too much on these details stalls progress and keeps people from ever getting started. Persistence is key. It may be cliche but you have to stick with it, even when things don’t go as planned. (and they wont go as you planned) Finding good people to work with and building strong partnerships can double or even triple your business in a very short time. The right team and relationships can make or break you. Another major lesson: listen to your customers. Having a solid feedback loop is critical. You don’t have to implement every request, but if you actually pay attention to what people are asking for, you’ll always find ways to improve and grow. At the end of the day, I approach business like a game—I stay lighthearted and adaptable. Taking things too seriously kills creativity, and frankly, it’s just no fun.
Calendly Productivity 273 using What Jamie has to say about Calendly GoHighLevel 1 using What Jamie has to say about GoHighLevel Google Sheets Platform 288 using What Jamie has to say about Google Sheets Zapier Other 335 using What Jamie has to say about Zapier newDocumentReady(function () { $(".database-result-bottom").unbind().click(function() { $(this).find(".database-result-bottom-contents").toggle(); }) // Mobile DB view toggle — switch between the compact row list (default) // and the rich card view, remembered in localStorage. Instant, no reload. // Leading ';' guards against ASI: the preceding statement ends in `})`. ;(function () { var group = document.querySelector('.db-view-toggle-group'); if (!group) return; var rowsPanel = document.getElementById('db-view-rows'); var cardsPanel = document.getElementById('db-view-cards'); function applyView(view) { var isCards = view === 'cards'; if (cardsPanel) cardsPanel.classList.toggle('hidden', !isCards); if (rowsPanel) rowsPanel.classList.toggle('hidden', isCards); group.querySelectorAll('.db-view-toggle').forEach(function (b) { b.classList.toggle('db-view-toggle-active', b.dataset.view === view); }); } var saved = 'rows'; try { saved = window.localStorage.getItem('dbMobileView') || 'rows'; } catch (e) {} applyView(saved === 'cards' ? 'cards' : 'rows'); group.querySelectorAll('.db-view-toggle').forEach(function (b) { b.addEventListener('click', function () { var v = b.dataset.view; try { window.localStorage.setItem('dbMobileView', v); } catch (e) {} applyView(v); }); }); })(); // Search UX: debounced auto-submit + global "/" focus shortcut. // Server-side pg_search is GIN-indexed and returns in <50ms; combined // with the page render, total feedback after the debounce window is // ~500ms — close enough to "live" without an XHR/Turbo refactor. var searchInput = document.getElementById('search'); if (searchInput) { var debounceTimer = null; var lastSubmittedValue = searchInput.value; searchInput.addEventListener('input', function () { clearTimeout(debounceTimer); debounceTimer = setTimeout(function () { // Don't submit if the value hasn't changed (e.g. arrow keys). if (searchInput.value === lastSubmittedValue) return; lastSubmittedValue = searchInput.value; searchInput.form && searchInput.form.submit(); }, 350); }); // Enter still submits immediately — short-circuits the debounce. searchInput.addEventListener('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); clearTimeout(debounceTimer); searchInput.form && searchInput.form.submit(); } }); } // Global "/" shortcut to focus search — GitHub/Linear pattern. document.addEventListener('keydown', function (e) { if (e.key !== '/' || e.metaKey || e.ctrlKey || e.altKey) return; var t = e.target; if (t && (t.tagName === 'INPUT' || t.tagName === 'TEXTAREA' || t.isContentEditable)) return; var s = document.getElementById('search'); if (s) { e.preventDefault(); s.focus(); s.select(); } }); function prettySliderValue(func, value) { var n = Math.round(Number(value)); if (func == "money") { if (n >= 1000000000) return "$" + (n / 1000000000).toFixed(n % 1000000000 === 0 ? 0 : 1) + "B"; if (n >= 1000000) return "$" + (n / 1000000).toFixed(n % 1000000 === 0 ? 0 : 1) + "M"; if (n >= 1000) return "$" + (n / 1000).toFixed(n % 1000 === 0 ? 0 : 1) + "K"; return "$" + numberWithCommas(n); } else if (func == "daystomonths") { return (n / 30) + " months"; } else if (func == "hours") { return n + " hours"; } else { return n; } } function getInitialSliderValues(el) { var initial = el.dataset.initial; var defMin = Number(el.dataset.defaultmin); var defMax = Number(el.dataset.defaultmax); if (initial) { var parts = initial.split("|"); var a = parts[0] === "" ? defMin : Number(parts[0]); var b = parts[1] === "" ? defMax : Number(parts[1]); return [a, b]; } return [defMin, defMax]; } function createTwoProngedSlider(id) { var el = document.querySelector(id); if (!el || el.noUiSlider) return; var min = Number(el.dataset.min); var max = Number(el.dataset.max); var step = Number(el.dataset.step); var cleanfunc = el.dataset.cleanfunc; var values = getInitialSliderValues(el); var container = el.closest(".range-filter") || el.parentElement; var input = container.querySelector('input[type="hidden"]'); var label = container.querySelector(".preview-label"); noUiSlider.create(el, { start: values, connect: true, step: step, range: { min: min, max: max }, behaviour: "tap-drag" }); el.noUiSlider.on("update", function(vals) { var lo = Math.round(Number(vals[0])); var hi = Math.round(Number(vals[1])); if (label) label.textContent = prettySliderValue(cleanfunc, lo) + " – " + prettySliderValue(cleanfunc, hi); if (input) input.value = lo + "|" + hi; }); el.noUiSlider.on("change", function() { var form = el.closest("form"); if (form) form.submit(); }); } createTwoProngedSlider("#revenue-slider"); createTwoProngedSlider("#starting-costs-slider"); createTwoProngedSlider("#time-to-revenue-slider"); createTwoProngedSlider("#min-hours-per-week"); createTwoProngedSlider("#market-size"); createTwoProngedSlider("#startup-costs"); createTwoProngedSlider("#case-studies"); $(".mobile-filters-applied-button").click(function() { $(".database-filters").addClass("inView") }) $(".close-mobile-filters").click(function() { $(".database-filters").removeClass("inView") }) // Explore "More filters" — reveal/hide the secondary filter pills. var moreFiltersToggle = document.getElementById("explore-more-filters-toggle"); if (moreFiltersToggle) { moreFiltersToggle.addEventListener("click", function () { var panel = document.querySelector(".explore-secondary-filters"); if (!panel) return; var nowHidden = panel.classList.toggle("hidden"); moreFiltersToggle.setAttribute("aria-expanded", String(!nowHidden)); }); } // Infinite scroll lives in its OWN init block below (initSSInfiniteScroll), // deliberately decoupled from this newDocumentReady callback. Anything that // throws above (a slider lib that didn't load from CDN, a jQuery plugin, // etc.) would otherwise abort the rest of THIS callback and silently kill // infinite scroll — the "only works on a hard reload" bug. Keeping it // separate means nothing here can take it down. }); // ---- Infinite scroll (pro/admin/free-access; table + tile views) ---- // Driven off Kaminari's next-page URL, which the partial renders into // #infinite-scroll-sentinel only when the visitor is eligible. We fetch the // next full page, lift out the children of its .database-append-target // container (<tbody> rows for the table view, tiles for the grid views), // append them, then chain to that page's own sentinel URL. DOMParser does // NOT execute the fetched page's scripts, so only content nodes are added — // sliders/search/PostHog never re-run. The sentinel is absent for non-pro // visitors, so this whole block no-ops for them and their paywall is intact. // // Idempotent: guarded by sentinel.dataset.ssInfiniteInit so re-running on // pageshow (bfcache/back-forward restore, where DOMContentLoaded never fires) // can't double-observe an already-wired sentinel. function initSSInfiniteScroll() { var sentinel = document.getElementById('infinite-scroll-sentinel'); if (!sentinel || !sentinel.dataset.nextUrl) return; if (sentinel.dataset.ssInfiniteInit === '1') return; sentinel.dataset.ssInfiniteInit = '1'; // The "database" view renders TWO append targets — the mobile card list // and the desktop table tbody (one is display:none per viewport). Append // to both so infinite scroll works no matter which is visible. Tile views // have a single target. containers[0] drives the loaded-count readout. var containers = Array.prototype.slice.call(document.querySelectorAll('.database-append-target')); if (!containers.length) { delete sentinel.dataset.ssInfiniteInit; return; } var container = containers[0]; // Infinite scroll is live — hide the prev/next fallback for JS clients. var paginate = document.querySelector('.paginate'); if (paginate) paginate.style.display = 'none'; var numResults = document.querySelector('.num-results'); var loadingEl = sentinel.querySelector('.infinite-scroll-loading'); var nextUrl = sentinel.dataset.nextUrl; var loading = false; // Item nodes only — tile partials (e.g. _video) emit a sibling <style> // per render; those are global CSS we already have, so skip them when // appending and counting. function itemNodes(root) { return Array.prototype.filter.call(root.children, function (n) { return n.tagName !== 'STYLE' && n.tagName !== 'SCRIPT'; }); } function updateCount() { if (!numResults) return; var count = itemNodes(container).length; // Keep the "of N …" suffix; just bump the leading loaded-count. numResults.textContent = numResults.textContent.replace(/Showing\s+[\d,]+/, 'Showing ' + count.toLocaleString()); } function loadMore() { if (loading || !nextUrl) return; loading = true; if (loadingEl) loadingEl.style.display = ''; fetch(nextUrl, { headers: { 'X-Requested-With': 'XMLHttpRequest' } }) .then(function (r) { return r.text(); }) .then(function (html) { var doc = new DOMParser().parseFromString(html, 'text/html'); var srcs = doc.querySelectorAll('.database-append-target'); Array.prototype.forEach.call(srcs, function (src, i) { var dest = containers[i]; if (!dest) return; itemNodes(src).forEach(function (node) { dest.appendChild(document.importNode(node, true)); }); }); var ns = doc.getElementById('infinite-scroll-sentinel'); nextUrl = (ns && ns.dataset.nextUrl) || null; sentinel.dataset.nextUrl = nextUrl || ''; updateCount(); if (!nextUrl) { observer.disconnect(); sentinel.style.display = 'none'; } }) .catch(function () { /* leave nextUrl intact so a later scroll retries */ }) .finally(function () { loading = false; if (loadingEl) loadingEl.style.display = 'none'; }); } var observer = new IntersectionObserver(function (entries) { entries.forEach(function (e) { if (e.isIntersecting) loadMore(); }); }, { rootMargin: '600px 0px' }); observer.observe(sentinel); } newDocumentReady(initSSInfiniteScroll); // bfcache/back-forward restore doesn't fire DOMContentLoaded; pageshow does. // Idempotency guard above makes the re-call a no-op when already wired. window.addEventListener('pageshow', initSSInfiniteScroll); .blur-row { filter: blur(4px); pointer-events: none; user-select: none; } /* Mobile view toggle (rows ↔ cards) */ .db-view-toggle { display: inline-flex; align-items: center; gap: 5px; padding: 5px 11px; border: 0; border-radius: 6px; background: transparent; color: #64748b; font-size: 12px; font-weight: 600; cursor: pointer; transition: background-color 0.12s, color 0.12s; } .db-view-toggle-active { background: #0f172a; color: #ffffff; } .database-video-grid { display: grid; grid-template-columns: 1fr; gap: 18px; } @media (min-width: 768px) { .database-video-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } /* Airbnb-style range slider (uses noUiSlider) */ .range-filter { display: inline-flex; flex-direction: column; justify-content: center; gap: 4px; padding: 6px 16px 10px; border: 1px solid rgb(226 232 240); background: #fff; border-radius: 9999px; min-width: 220px; margin-bottom: 0 !important; } .range-filter .range-filter-header { display: flex; align-items: baseline; gap: 6px; line-height: 1; } .range-filter .range-filter-header label { font-size: 0.875rem; color: rgb(100 116 139); font-weight: 500; margin: 0 !important; line-height: 1.2; flex-shrink: 0; } .range-filter .range-filter-header label::after { content: "|"; margin-left: 6px; color: rgb(203 213 225); font-weight: 400; } .range-filter .preview-label { font-size: 0.875rem; color: rgb(15 23 42); font-weight: 600; line-height: 1.2; margin: 0 !important; white-space: nowrap; } .range-filter .filter-slider.noUi-target { height: 3px; background: rgb(226 232 240); border: 0; box-shadow: none; border-radius: 9999px; margin: 3px 6px 0; } .range-filter.is-active { border-color: rgb(15 23 42); background: rgb(241 245 249); } .range-filter.is-active .range-filter-header label { color: rgb(15 23 42); } .range-filter .filter-slider .noUi-connect { background: rgb(15 23 42); } .range-filter .filter-slider .noUi-handle { height: 20px; width: 20px; top: -8px; right: -10px; border-radius: 9999px; background: #fff; border: 1px solid rgb(203 213 225); box-shadow: 0 1px 2px rgba(15, 23, 42, 0.12), 0 2px 4px rgba(15, 23, 42, 0.08); cursor: grab; transition: transform 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease; outline: none; } .range-filter .filter-slider .noUi-handle::before, .range-filter .filter-slider .noUi-handle::after { display: none; } .range-filter .filter-slider .noUi-handle:hover { border-color: rgb(15 23 42); transform: scale(1.05); } .range-filter .filter-slider .noUi-handle.noUi-active, .range-filter .filter-slider .noUi-handle:focus-visible { cursor: grabbing; box-shadow: 0 0 0 6px rgba(15, 23, 42, 0.08), 0 2px 6px rgba(15, 23, 42, 0.18); border-color: rgb(15 23 42); } .range-filter .filter-slider.noUi-horizontal { height: 4px; } .range-filter input[type="hidden"] { display: none; }
No exit! Still running the day to day .
IDEA REVENUE Marketing toolkit for rea... · coffeecontracts.com "Digital marketing toolkit for real estate professionals." $250K /mo Email marketing for e-com... · boundlesslabs.io Email marketing agency for booming eCommerce brands. $8.3M /mo Amazon listing optimizati... · kenjiroi.com Amazon Seller Agency for PPC Management and Listing Optimization. $105K /mo Holistic online marketing... · avci-media.com Online Marketing Agency Boosting Businesses with Paid Traffic. $10K /mo Ecommerce development agency · neversettle.it Digital agency specializing in eCommerce and marketing solutions. $150K /mo Pay for performance seo · greenbananaseo.com Performance-based SEO agency guaranteeing top Google rankings. $650K /mo Linkedin lead generation ... · Leadcookie.com B2B LinkedIn lead generation agency. $55K /mo newDocumentReady(function() { // Save-bookmark hover — delegated on document (guarded once) so rows // appended by infinite scroll get the behavior too. mouseover/mouseout // bubble (mouseenter/leave don't); closest('tr') scopes to the hovered row, // and the relatedTarget check suppresses flicker when moving cell-to-cell // within the same row. if (!window.__saveBookmarkHoverInit) { window.__saveBookmarkHoverInit = true; document.addEventListener('mouseover', function(e) { var row = e.target.closest('tr'); if (!row) return; var saveBookmark = row.querySelector('.save-bookmark'); if (saveBookmark) saveBookmark.classList.remove('invisible'); }); document.addEventListener('mouseout', function(e) { var row = e.target.closest('tr'); if (!row) return; if (e.relatedTarget && row.contains(e.relatedTarget)) return; var saveBookmark = row.querySelector('.save-bookmark'); if (saveBookmark) saveBookmark.classList.add('invisible'); }); } // ---- Tag-pill hover tooltip (LLM-generated context for each Tagging) ---- if (!window.__tagTooltipInit) { window.__tagTooltipInit = true; const tip = document.createElement('div'); tip.className = 'tag-tooltip-popover'; tip.style.cssText = [ 'position:fixed','z-index:9999','max-width:340px','display:none', 'background:#0f172a','color:#fff','font-size:12px','line-height:1.4', 'padding:8px 10px','border-radius:6px','box-shadow:0 8px 24px rgba(0,0,0,.18)', 'pointer-events:none','white-space:normal' ].join(';'); document.body.appendChild(tip); const showTip = function(e) { const target = e.currentTarget; const text = target.getAttribute('data-tag-tooltip'); if (!text) return; tip.textContent = text; tip.style.display = 'block'; const r = target.getBoundingClientRect(); const tr = tip.getBoundingClientRect(); let top = r.bottom + 8; if (top + tr.height > window.innerHeight - 8) top = r.top - 8 - tr.height; let left = r.left; if (left + tr.width > window.innerWidth - 8) left = window.innerWidth - tr.width - 8; if (left < 8) left = 8; tip.style.top = Math.round(top) + 'px'; tip.style.left = Math.round(left) + 'px'; }; const hideTip = function() { tip.style.display = 'none'; }; document.addEventListener('mouseover', function(e) { const el = e.target.closest('[data-tag-tooltip]'); if (el) showTip({ currentTarget: el }); }); document.addEventListener('mouseout', function(e) { const el = e.target.closest('[data-tag-tooltip]'); if (el) hideTip(); }); } });
Who is the owner of Jamie Rossi | American Entrepreneur ? When did Jamie Rossi start Jamie Rossi | American Entrepreneur ? How much money has Jamie Rossi made from Jamie Rossi | American Entrepreneur ? {"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Who is the owner of Jamie Rossi | American Entrepreneur ?","acceptedAnswer":{"@type":"Answer","text":"Jamie Rossi is the founder of Jamie Rossi | American Entrepreneur ."}},{"@type":"Question","name":"When did Jamie Rossi start Jamie Rossi | American Entrepreneur ?","acceptedAnswer":{"@type":"Answer","text":"2021"}},{"@type":"Question","name":"How much money has Jamie Rossi made from Jamie Rossi | American Entrepreneur ?","acceptedAnswer":{"@type":"Answer","text":"Jamie Rossi started the business in 2021, and currently makes an average of $2.7K/year."}}]}