Best Adult Toys Australia 2025 — Honest Reviews | Secret Fantasy
Secret Fantasy See top picks →
Issue No. 01 — 2025 Australia
Best Adult Toys Australia 2025

The toys that actually deliver — ranked by satisfaction-per-dollar.

We sift through hundreds of adult toys sold in Australia, then publish the short, honest list of the ones worth your money. No invented ratings. No fake urgency. No hype. Just direct verdicts from people who've actually used them.

Discreet billing & shipping · 18+ only · Australian-focused reviews

Affiliate disclosure: We may earn a commission when you buy through our links. It never changes the price you pay, and we only feature products we'd recommend to a mate.
Secret Fantasy editorial cover — the 2025 honest shortlist of adult toys for Australian buyers
Inside this issue
8 toys, 6 categories, 0 hype
The shortlist

The 8 toys worth your money in 2025

These are the products we'd hand to a friend without hesitation. Each pick has a one-line verdict, the honest caveat, and a direct link to the retailer's product page.

Lovense Sex Machine — app-controlled automatic thrusting device
Best premium splurge $1,615

Lovense Sex Machine

The benchmark for serious solo or partnered play — full app control, interchangeable attachments, hands-free hours. Honest caveat: it's bulky, and storage takes thought.

View on retailer →
Autoblow VacuGLIDE 2 suction-aided milking machine
Best automatic for men $1,700

Autoblow VacuGLIDE 2

Combines stroking with adjustable suction — closer to a real sensation than anything else at this tier. Honest caveat: clean-up takes the better part of ten minutes.

View on retailer →
LELO Soraya Wave dual-action rabbit vibrator
Best rabbit overall $323

LELO Soraya Wave

LELO's "come-hither" WaveMotion is genuinely novel — internal and external stim that doesn't feel like two motors fighting. Honest caveat: charge cradle is fiddly.

View on retailer →
Bathmate HydroXtreme9 hydropump kit with handball pump
Best penis pump $425

Bathmate HydroXtreme9

Water-based hydropump with the most consistent reviews of any model in the Bathmate range. Honest caveat: routine takes 15+ minutes in the shower to use properly.

View on retailer →
Autoblow AI Ultra wireless stroking masturbator
Best AI-driven stroker $510

Autoblow AI Ultra

Wireless, ten programmed patterns, and the new "edge" mode actually works. Honest caveat: the in-built audio narration is corny — turn it off.

View on retailer →
Womanizer DUO 2 Pleasure Air rabbit vibrator in blueberry
Best Pleasure Air rabbit $250

Womanizer DUO 2

Womanizer's air-pulse tech paired with a G-spot arm — the closest thing to a "guaranteed finish" device on the market. Honest caveat: noisier than its predecessor.

View on retailer →
Lovense Lush 4 app-controlled Bluetooth wearable egg vibrator
Best long-distance $246

Lovense Lush 4

The wearable that defined app-controlled play — improved antenna means the connection actually stays stable across the country. Honest caveat: still a touch loud on max.

View on retailer →
We-Vibe Sync 2 app-controlled wearable couples vibrator
Best for couples $229

We-Vibe Sync 2

The reigning wearable couples vibe — adjustable fit, partner app, and rumbly motors that don't tingle out. Honest caveat: charging pins corrode if not dried after a wash.

View on retailer →
Side-by-side

The 2025 shortlist compared

All eight picks on one screen. Sort by price, app control or warranty — whichever matters most.

Product Best for Price App control Waterproof Warranty
Lovense Sex Machine Premium splurge $1,615 Yes Splash-resistant 1 year View →
Autoblow VacuGLIDE 2 Automatic for men $1,700 No No 2 years View →
LELO Soraya Wave Rabbit overall $323 No Yes (IPX7) 1 year + 10-yr quality View →
Bathmate HydroXtreme9 Penis pump $425 No Yes (water-based) 2 years View →
Autoblow AI Ultra AI-driven stroker $510 Yes (wireless) No 2 years View →
Womanizer DUO 2 Pleasure Air rabbit $250 No Yes (IPX7) 2 years + 15-yr quality View →
Lovense Lush 4 Long-distance $246 Yes (Bluetooth + LDR) Yes (IPX7) 1 year View →
We-Vibe Sync 2 Couples $229 Yes (We-Connect) Yes (IPX7) 2 years View →
How we test

Our selection criteria — in plain English.

We don't run a points-out-of-ten algorithm. Secret Fantasy's shortlist is built from three inputs: real Australian customer feedback aggregated across major retailers, satisfaction-per-dollar analysis (does the experience justify the price?), and long-term durability — the toys that are still working, and still being recommended, twelve months in.

If we can't verify a product holds up, we don't list it. That's why the shortlist is small. We'd rather feature eight winners than fifty maybes.

01

Real customer signal

We aggregate hundreds of verified buyer reviews from Australian retailers and weight them for recency and consistency.

02

Satisfaction-per-dollar

A $250 toy isn't automatically worse than a $1,600 one — we score the experience relative to the price tag.

03

Durability & warranty

Anything with a known motor-failure or charging issue gets dropped — no matter how hyped it is on launch.

The Secret Fantasy Dispatch

One email a month. Only the good stuff.

A monthly shortlist of new releases worth your attention, exclusive Australian deals we hunt down, and the occasional honest "skip this one" warning. No spam. Unsubscribe in one click.

What interests you most? (optional)

Instant signup. No credit card. Unsubscribe anytime.

Common questions

Buying adult toys in Australia — answered

Are adult toys shipped discreetly in Australia?

+

Yes — every product we link to ships in plain, unbranded packaging with a generic return name on the label. Australian retailers we feature (including the Wild Secrets / AdultShop network) use neutral exterior boxes with no product imagery or branding, and billing on your statement is listed under a discreet trading name rather than a sex-toy company.

What is the return policy for adult toys in Australia?

+

Unopened adult toys can generally be returned within 30 days, but for hygiene reasons opened intimate products cannot be returned unless they're faulty. If you receive a defective item, the manufacturer warranty (1–2 years for most picks in our shortlist, up to 15 years on LELO and Womanizer "quality guarantees") covers replacement at no cost.

(function () { function isLeadForm(f) { var a = (f.getAttribute('action') || '').toLowerCase(); return a.indexOf('/api/lead') >= 0; } function thankYouPanel(name) { var first = (name || '').trim().split(/\s+/)[0] || ''; var greet = first ? ('Thanks, ' + first + '!') : 'Thanks for reaching out!'; var wrap = document.createElement('div'); wrap.setAttribute('data-stui-thanks', '1'); // Bigger, bolder, animated. Replaces the form with something // unmissable — owner feedback was that the old green panel was // easy to miss in a tall hero card. Now: large tick badge, // bold greeting, two readable lines, subtle entrance animation. wrap.style.cssText = [ 'padding:36px 28px', 'border-radius:18px', 'background:linear-gradient(135deg,#ecfdf5 0%,#d1fae5 100%)', 'border:2px solid #6ee7b7', 'color:#064e3b', 'font-family:inherit', 'text-align:center', 'box-shadow:0 10px 40px rgba(16,185,129,0.18)', 'animation:stui-thanks-in 0.5s ease-out both', ].join(';'); wrap.innerHTML = '
' + '
' + greet + '
' + '
We got your enquiry — usually back within 15 minutes during business hours.
' + '
📬 A confirmation has been sent to your email.
'; return wrap; } // One-shot keyframes injection so the entrance animation works // without depending on the page's stylesheet. function ensureKeyframes() { if (document.getElementById('stui-thanks-keyframes')) return; var s = document.createElement('style'); s.id = 'stui-thanks-keyframes'; s.textContent = '@keyframes stui-thanks-in { from { opacity: 0; transform: translateY(12px) scale(0.96); } to { opacity: 1; transform: translateY(0) scale(1); } } @keyframes stui-toast-in { from { opacity: 0; transform: translate(-50%, -10px); } to { opacity: 1; transform: translate(-50%, 0); } } @keyframes stui-toast-out { to { opacity: 0; transform: translate(-50%, -10px); } }'; document.head.appendChild(s); } // Sticky top-of-viewport toast — fires alongside the inline swap so // owners definitely see SOMETHING acknowledging the submission, even // if the form sat in a section that's not currently in view. function showTopToast(name) { ensureKeyframes(); var first = (name || '').trim().split(/\s+/)[0] || ''; var msg = first ? 'Thanks ' + first + ' — we got your enquiry.' : 'Thanks — we got your enquiry.'; var t = document.createElement('div'); t.setAttribute('data-stui-toast', '1'); t.style.cssText = [ 'position:fixed', 'top:20px', 'left:50%', 'transform:translateX(-50%)', 'z-index:2147483647', 'padding:12px 20px', 'border-radius:9999px', 'background:#0a0a0a', 'color:#fff', 'font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif', 'font-size:14px', 'font-weight:600', 'box-shadow:0 8px 32px rgba(0,0,0,0.25)', 'display:inline-flex', 'align-items:center', 'gap:10px', 'animation:stui-toast-in 0.4s ease-out both', ].join(';'); t.innerHTML = '' + msg; document.body.appendChild(t); setTimeout(function () { t.style.animation = 'stui-toast-out 0.3s ease-in both'; setTimeout(function () { t.remove(); }, 320); }, 5000); } function swap(form, name) { ensureKeyframes(); var panel = thankYouPanel(name); if (form.parentNode) { form.parentNode.replaceChild(panel, form); // Wait one frame so layout settles before scrolling — avoids // a race where the old form's height was still in the layout // when scrollIntoView was called and the panel ended up just // off-screen. requestAnimationFrame(function () { try { panel.scrollIntoView({ behavior: 'smooth', block: 'center' }); } catch (e) {} }); try { console.log('[stui-form] swap completed — thank-you panel inserted'); } catch (e) {} } else { try { console.warn('[stui-form] form has no parent — cannot swap'); } catch (e) {} } // Belt + braces: a sticky toast at top of viewport, in case the // user's scrolled away from the form area and didn't notice the // swap, OR the form was in a tall section. showTopToast(name); } function attach(form) { if (form.dataset.stuiBound === '1') return; form.dataset.stuiBound = '1'; form.addEventListener('submit', function (ev) { // Honeypot — keep server's existing trap behaviour. var hp = form.querySelector('input[name="website"]'); if (hp && hp.value && hp.value.trim() !== '') return; ev.preventDefault(); var fd = new FormData(form); var name = fd.get('name') || fd.get('full_name') || ''; var btn = form.querySelector('button[type="submit"], input[type="submit"]'); var prevTxt = btn ? (btn.innerText || btn.value) : null; if (btn) { btn.disabled = true; if (btn.innerText !== undefined) btn.innerText = 'Sending…'; else btn.value = 'Sending…'; } // Signal to /api/lead that this is a JS-driven submission so it // returns 200 JSON instead of a 303 redirect to a full HTML // page. Treat ANY 2xx as success even if the response body // can't be parsed — the data already hit the server. Treat the // swap (DOM mutation) as best-effort; a swap failure shouldn't // show the user a "couldn't send" alert when in fact the lead // DID land. fetch(form.action, { method: 'POST', body: fd, headers: { 'X-Stui-Form': 'fetch', 'Accept': 'application/json' }, }) .then(function (res) { if (!res.ok) { try { console.error('[stui-form] HTTP ' + res.status, res); } catch (e) {} throw new Error('http_' + res.status); } // Submission succeeded — swap is purely visual. If swap // throws, log it but DON'T propagate to the catch (the // user's data is in; they shouldn't see an error alert). try { swap(form, String(name || '')); } catch (swapErr) { try { console.warn('[stui-form] swap failed but submission succeeded', swapErr); } catch (e) {} } }) .catch(function (err) { try { console.error('[stui-form] submit failed:', err); } catch (e) {} if (btn) { btn.disabled = false; if (btn.innerText !== undefined && prevTxt) btn.innerText = prevTxt; else if (prevTxt) btn.value = prevTxt; } alert('Sorry — couldn\'t send that. Please call us instead, or try again in a sec.'); }); }); } function init() { var forms = document.querySelectorAll('form'); for (var i = 0; i < forms.length; i++) { if (isLeadForm(forms[i])) attach(forms[i]); } // Handle no-JS fallback: server redirects to ?submitted=1 on a // standard form POST. Swap any lead form on the page for a panel. if (window.location.search.indexOf('submitted=1') >= 0) { for (var j = 0; j < forms.length; j++) { if (isLeadForm(forms[j])) { swap(forms[j], ''); // Strip the query param so a refresh doesn't re-trigger. if (window.history && window.history.replaceState) { var u = window.location.pathname + window.location.hash; window.history.replaceState({}, '', u); } break; } } } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })(); Secret Fantasy