RSPCA Warns of Rise in Abandoned Pets

RSPCA Warns of Rise in Abandoned Pets

RSPCA Warns of Rise in Abandoned Pets | BuyAPet.co.uk
RSPCA Alert

RSPCA Warns of Rise in Abandoned Pets

The RSPCA has raised alarm over a surge in abandoned pets across the UK—linking the trend to cost-of-living pressures and post-pandemic challenges.

4-minute read UK Focus

A worrying new trend

The RSPCA’s latest data shows thousands more reports of abandoned or neglected pets compared to last year—dogs and cats most affected, with small pets close behind.

What’s driving the rise?

  • Higher vet bills and food costs strain budgets.
  • Fewer pet-friendly rentals available.
  • Impulse adoptions during lockdown now proving difficult to maintain.

RSPCA response

The charity has urged owners struggling financially to reach out before giving up their pets, highlighting rehoming services, pet food banks and behavioural support schemes.

How the public can help

Adopt, don’t shop

Give a rescued animal a home instead of buying from unverified breeders or online listings.

Donate essentials

Food, bedding and toys can make a big difference at local shelters facing overflow.

Report concerns

If you suspect neglect or abandonment, contact the RSPCA or local animal welfare authority immediately.

Owner support options

Financial pressure?

Look into welfare grants, community vet clinics or pet food banks. Many rescues offer short-term foster care until owners recover stability.

Behavioural issues?

Seek guidance from qualified trainers or vets early—behavioural support can prevent crises and keep pets in homes.

RSPCA FAQs

Why are abandonment numbers increasing?

The RSPCA links the rise to inflation, housing insecurity, and a surge of inexperienced owners from the pandemic adoption boom.


What help does the RSPCA offer owners?

The charity offers emergency fostering, behaviour advice and referral to food aid programmes to keep pets with families whenever possible.


How can I report an abandoned animal?

Call the RSPCA helpline on 0300 1234 999 or use the online reporting tool with details and photos if safe to do so.

Information based on RSPCA reports and UK animal welfare guidance. Always seek help early if you’re struggling with pet care or costs.

Visit this page
'; const bottom = document.createElement('div'); bottom.className = 'bap-v7-ui-bottom'; bottom.innerHTML = '
Please enter your card number, expiry date and CVC above.
' + ''; fieldset.insertBefore(top, fieldset.firstChild); fieldset.appendChild(bottom); top.querySelector('.bap-v7-close').addEventListener('click', closeModal); bottom.querySelector('.bap-v7-continue').addEventListener('click', closeModal); } function neutraliseAncestors(fieldset) { neutralisedAncestors = []; let parent = fieldset.parentElement; while (parent && parent !== document.body && parent !== document.documentElement) { parent.classList.add('bap-stripe-v7-neutralise'); neutralisedAncestors.push(parent); parent = parent.parentElement; } } function restoreAncestors() { neutralisedAncestors.forEach(function (element) { if (element && element.classList) { element.classList.remove('bap-stripe-v7-neutralise'); } }); neutralisedAncestors = []; } function freezePage() { const html = document.documentElement; const body = document.body; savedScrollY = window.pageYOffset || html.scrollTop || body.scrollTop || 0; oldBodyPosition = body.style.position; oldBodyTop = body.style.top; oldBodyLeft = body.style.left; oldBodyRight = body.style.right; oldBodyWidth = body.style.width; oldBodyMaxWidth = body.style.maxWidth; oldBodyOverflow = body.style.overflow; oldBodyOverflowX = body.style.overflowX; oldHtmlOverflow = html.style.overflow; oldHtmlOverflowX = html.style.overflowX; html.classList.add('bap-stripe-v7-open'); body.classList.add('bap-stripe-v7-open'); html.style.overflow = 'hidden'; html.style.overflowX = 'hidden'; body.style.position = 'fixed'; body.style.top = '-' + savedScrollY + 'px'; body.style.left = '0'; body.style.right = '0'; body.style.width = '100%'; body.style.maxWidth = '100%'; body.style.overflow = 'hidden'; body.style.overflowX = 'hidden'; } function restorePage() { const html = document.documentElement; const body = document.body; const scrollY = savedScrollY; html.classList.remove('bap-stripe-v7-open'); body.classList.remove('bap-stripe-v7-open'); body.style.position = oldBodyPosition; body.style.top = oldBodyTop; body.style.left = oldBodyLeft; body.style.right = oldBodyRight; body.style.width = oldBodyWidth; body.style.maxWidth = oldBodyMaxWidth; body.style.overflow = oldBodyOverflow; body.style.overflowX = oldBodyOverflowX; html.style.overflow = oldHtmlOverflow; html.style.overflowX = oldHtmlOverflowX; window.scrollTo(0, scrollY); } /* * Use the REAL visual viewport dimensions. * * Phone sizing: * - leaves roughly 20px each side on an iPhone 13-sized viewport * - never goes below 280px wide * * Larger screens: * - capped at 420px */ function sizeAndPositionModal() { if (!activeFieldset) { return; } const html = document.documentElement; const vv = window.visualViewport; const innerWidth = window.innerWidth || html.clientWidth || 320; const innerHeight = window.innerHeight || html.clientHeight || 480; const screenWidth = (window.screen && window.screen.width) ? window.screen.width : innerWidth; const screenHeight = (window.screen && window.screen.height) ? window.screen.height : innerHeight; const shortScreenEdge = Math.min(screenWidth, screenHeight); const isPhoneSized = shortScreenEdge <= 600; /* * V13 WIDTH * * Phones: use the larger of the browser viewport and CSS screen width, * then leave a clear equal margin on both sides. * * Tablets/desktops: use the browser viewport and cap the popup so it * stays professional rather than becoming too wide. */ const horizontalSpace = isPhoneSized ? Math.max(innerWidth, screenWidth) : innerWidth; let modalWidth; if (isPhoneSized) { const sideGap = horizontalSpace <= 360 ? 14 : 18; modalWidth = horizontalSpace - (sideGap * 2); modalWidth = Math.min(modalWidth, 430); } else { modalWidth = Math.min(520, innerWidth - 40); } modalWidth = Math.max(280, modalWidth); /* * Use the visible browser viewport for vertical space. * visualViewport is useful here because Safari's browser chrome * changes the usable height while scrolling/typing. */ const visibleHeight = vv ? vv.height : innerHeight; const visibleTop = vv ? vv.offsetTop : 0; const maxHeight = Math.max(220, visibleHeight - 32); activeFieldset.style.setProperty('width', modalWidth + 'px', 'important'); activeFieldset.style.setProperty('max-width', modalWidth + 'px', 'important'); activeFieldset.style.setProperty('max-height', maxHeight + 'px', 'important'); /* * KEY V13 CHANGE: * * Do not assume CSS left/top coordinates correspond to the screen. * First place the popup at 0/0, measure where the browser/theme * ACTUALLY rendered it, then shift it by the measured difference. * * This centres the popup according to its real on-screen rectangle, * even when a WordPress/theme wrapper creates an unexpected * containing block. */ activeFieldset.style.setProperty('left', '0px', 'important'); activeFieldset.style.setProperty('top', '0px', 'important'); requestAnimationFrame(function () { if (!activeFieldset) { return; } const rect = activeFieldset.getBoundingClientRect(); const targetWidth = isPhoneSized ? Math.max(innerWidth, screenWidth) : innerWidth; const desiredLeft = Math.max(8, (targetWidth - rect.width) / 2); let desiredTop; if (rect.height >= visibleHeight - 24) { desiredTop = visibleTop + 12; } else { desiredTop = visibleTop + Math.max(12, (visibleHeight - rect.height) / 2); } /* * Because rect.left / rect.top tell us where 0/0 actually landed, * subtract that offset to compensate for the containing block. */ const correctedLeft = desiredLeft - rect.left; const correctedTop = desiredTop - rect.top; activeFieldset.style.setProperty('left', correctedLeft + 'px', 'important'); activeFieldset.style.setProperty('top', correctedTop + 'px', 'important'); /* * One second measurement pass removes any remaining rounding / * browser-chrome discrepancy. */ requestAnimationFrame(function () { if (!activeFieldset) { return; } const rect2 = activeFieldset.getBoundingClientRect(); const deltaX = desiredLeft - rect2.left; const deltaY = desiredTop - rect2.top; if (Math.abs(deltaX) > 0.5) { const currentLeft = parseFloat(activeFieldset.style.left) || 0; activeFieldset.style.setProperty( 'left', (currentLeft + deltaX) + 'px', 'important' ); } if (Math.abs(deltaY) > 0.5) { const currentTop = parseFloat(activeFieldset.style.top) || 0; activeFieldset.style.setProperty( 'top', (currentTop + deltaY) + 'px', 'important' ); } }); }); } function keyboardIsOpen() { const vv = window.visualViewport; if (!vv || !baselineVisualHeight) { return false; } /* * If the visible viewport has shrunk substantially from the height * recorded when the popup first opened, treat that as the iOS/Android * on-screen keyboard being open. */ return vv.height < (baselineVisualHeight * 0.82); } function scheduleResize() { /* * V15 KEYBOARD RULE: * While the numeric keyboard is open, DO NOT reposition the modal. * * Earlier versions reacted to visualViewport changes while Stripe * moved focus from card number to expiry/CVC, which made the popup * jump down toward the footer. V15 deliberately leaves left/top/width * untouched until the keyboard closes. */ if (activeFieldset && keyboardIsOpen()) { return; } window.clearTimeout(resizeTimer); resizeTimer = window.setTimeout(function () { if (!activeFieldset || keyboardIsOpen()) { return; } sizeAndPositionModal(); }, 60); } function clearMeasuredStyles(fieldset) { if (!fieldset) { return; } fieldset.style.removeProperty('width'); fieldset.style.removeProperty('max-width'); fieldset.style.removeProperty('left'); fieldset.style.removeProperty('top'); fieldset.style.removeProperty('max-height'); } function openModal(fieldset, stripeBox) { if (!fieldset || !stripeBox || fieldset.classList.contains('bap-stripe-v7-modal')) { return; } activeFieldset = fieldset; activeStripeBox = stripeBox; baselineVisualHeight = window.visualViewport ? window.visualViewport.height : window.innerHeight; buildModalUi(fieldset); createBackdrop(); stripeBox.classList.remove('bap-stripe-v7-trigger'); neutraliseAncestors(fieldset); freezePage(); fieldset.classList.add('bap-stripe-v7-modal'); fieldset.setAttribute('role', 'dialog'); fieldset.setAttribute('aria-modal', 'true'); fieldset.setAttribute('aria-labelledby', 'bap-stripe-v7-title'); backdrop.hidden = false; backdrop.setAttribute('aria-hidden', 'false'); sizeAndPositionModal(); requestAnimationFrame(function () { sizeAndPositionModal(); requestAnimationFrame(function () { sizeAndPositionModal(); const closeButton = fieldset.querySelector('.bap-v7-close'); if (closeButton) { try { closeButton.focus({ preventScroll: true }); } catch (e) { closeButton.focus(); } } }); }); } function closeModal() { if (!activeFieldset) { return; } const fieldset = activeFieldset; const stripeBox = activeStripeBox; fieldset.classList.remove('bap-stripe-v7-modal'); fieldset.removeAttribute('role'); fieldset.removeAttribute('aria-modal'); fieldset.removeAttribute('aria-labelledby'); clearMeasuredStyles(fieldset); if (stripeBox && document.contains(stripeBox)) { stripeBox.classList.add('bap-stripe-v7-trigger'); } if (backdrop) { backdrop.hidden = true; backdrop.setAttribute('aria-hidden', 'true'); } activeFieldset = null; activeStripeBox = null; baselineVisualHeight = 0; restoreAncestors(); restorePage(); } function initialise() { const fieldset = document.getElementById('rtcl-stripe-cc-form'); const stripeBox = document.getElementById('stripe-card-element'); if (!fieldset || !stripeBox || !fieldset.contains(stripeBox)) { return; } buildModalUi(fieldset); createBackdrop(); if (!fieldset.classList.contains('bap-stripe-v7-modal')) { stripeBox.classList.add('bap-stripe-v7-trigger'); } if (stripeBox.dataset.bapV7Ready === '1') { return; } stripeBox.dataset.bapV7Ready = '1'; stripeBox.addEventListener('click', function (event) { if (!fieldset.classList.contains('bap-stripe-v7-modal')) { event.preventDefault(); openModal(fieldset, stripeBox); } }); } document.addEventListener('keydown', function (event) { if (event.key === 'Escape' && activeFieldset) { event.preventDefault(); closeModal(); } }); window.addEventListener('resize', scheduleResize, { passive: true }); window.addEventListener('orientationchange', scheduleResize, { passive: true }); if (window.visualViewport) { window.visualViewport.addEventListener('resize', scheduleResize, { passive: true }); } if (document.readyCounty === 'loading') { document.addEventListener('DOMContentLoaded', initialise); } else { initialise(); } const observer = new MutationObserver(function () { if (activeFieldset && !document.contains(activeFieldset)) { clearMeasuredStyles(activeFieldset); activeFieldset = null; activeStripeBox = null; baselineVisualHeight = 0; if (backdrop) { backdrop.hidden = true; backdrop.setAttribute('aria-hidden', 'true'); } restoreAncestors(); restorePage(); } initialise(); }); observer.observe(document.documentElement, { childList: true, subtree: true }); })();