Crockpot Meatball Soup with Tortellini
This Crockpot Meatball Soup with Tortellini is the perfect dinner for a cold night. Using frozen meatballs and pantry staples makes it quick and easy.
Hi friends!
I’ve got a new crockpot recipe to share with you guys today. It’s been cold here and I’ve been craving soup and at the end of the week I often find myself turning to the freezer to see what I have on hand to use up.
I always try to keep a stock of frozen meatballs (Simek’s are my favorite) and last week I pulled some out to make this soup.
If you’re looking for homemade meatball recipes, try:
- Cheesy BBQ Meatballs
- Apple Cheddar Meatballs
- Paleo Turkey Sweet Potato Meatballs
- Carrot Pineapple Turkey Meatballs
Although this recipe does require a little chopping, it’s nothing major and it still comes together fairly quickly with the slow cooker doing most of the work for you. If you want to make it even easier, you can sub in your favorite frozen veggies.
Ingredients for Crockpot Meatball Soup with Tortellini
Many of the ingredients in this soup are pantry and freezer staples. Here’s what you’ll need:
- Garlic and onion – for flavor!
- Peppers and carrots- feel free to sub in your favorite veggies
- Great northern beans – for some added fiber!
- Diced and crushed tomatoes – if you have leftover crushed tomatoes, freeze them for another recipe!
- Beef broth – I prefer this because it has a bit richer flavor for this recipe but you could use chicken or vegetable broth as well.
- Frozen meatballs – Grab whatever brand you like but the smaller the better for ease of eating in this soup
- Baby spinach – just an easy way to add another veggie but feel free to skip this if you want
- Tortellini – I like this soup with tortellini but you can easily make it without tortellini or use whatever pasta you have on hand.
How To Make Crockpot Turkey Meatball Soup
To make this soup just follow a few simple steps:
- Combine most of the ingredients in the slow cooker and let it cook on low 6- 8 hours. Save some of the broth, the baby spinach and the pasta to add at the end.
- Cook the tortellini separately or add for the last 30 minutes of cooking.
- Stir in the spinach just before serving.
How to make crockpot meatball soup thicker or thinner
For a thicker broth, mix in a can of cream of mushroom soup or a cornstarch slurry. To make the soup thinner, add extra beef broth!
Crockpot Meatball Soup Variations
Mexican Meatball Soup
Swap the white bean for black beans, add some diced green chilis and swap the Italian seasoning for cumin and chili powder. Top with avocado and shredded cheese!
Crockpot Wedding Soup with Frozen Meatballs
Swap the tortellini for a smaller pasta like acini de pepe or orzo and leave out the diced tomatoes and crushed tomatoes. Or try a recipe like this Slow Cooker Italian Wedding Soup.
French Onion Soup Meatballs Crockpot
For a twist on French onion soup, brown the onions until caramelized, swap the Italian seasoning for a packet of French onion soup mix and melt some gruyere cheese on top before serving.
Slow Cooker Meatball Soup Recipe
Here’s the recipe I use:
Crockpot Meatball Soup with Tortellini
This Crockpot Meatball Soup with Tortellini is the perfect dinner for a cold night. Using frozen meatballs and pantry staples makes it quick and easy.
Ingredients
- 3 cloves garlic, minced
- 1 cup diced onion
- 1 red bell pepper, diced
- 1–2 cups diced carrots
- 1 (15 oz) can great northern beans, drained and rinsed
- 1 (15 oz can diced tomatoes, drained
- 14 oz crushed tomatoes
- 1– 2 quarts beef broth **
- 1 pound frozen meatballs (small or mini-sized)
- 1 tsp salt
- 2 tsp Italian seasoning
- 8 oz fresh baby spinach
- 2 Tbsp fresh parsley
- parmesan cheese to garnish
- 12 oz tortellini (or your favorite pasta)
Instructions
- Combine garlic, onion, peppers, carrots, beans, diced and crushed tomatoes, 1 quart beef broth, meatballs, salt and Italian season in a slow cooker and cook on low for 6-8 hours.
- Option 1: Cook tortellini separately and portion into bowls. Then serve soup over tortellini
- Option 2: Add tortellini for last 30 minutes in the slow cooker. (Tortellini may absorb some of the broth when stored so I advise cooking separately if you’re planning to have leftovers)
- Stir in baby spinach and fresh parsley 5 min before serving to allow spinach to wilt. Add extra beef broth if you want your soup more liquidy! Garnish with parmesan and serve.
Notes
**Depending how you like your soup, you may want to add 2-4 more cups of beef broth. I prefer a little less broth so I start with 1 quart and add more if needed.
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.theleangreenbean.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:””,”postId”:43740};
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.smoothScroll = {
init() {
document.addEventListener( ‘click’, ( e ) => {
let anchor = e.target;
if ( anchor.tagName !== ‘A’ ) {
anchor = anchor.closest( ‘a.tasty-recipes-scrollto’ );
}
if ( ! anchor || ! anchor.classList.contains( ‘tasty-recipes-scrollto’ ) ) {
return;
}
const elementHref = anchor.getAttribute( ‘href’ );
if ( ! elementHref ) {
return;
}
e.preventDefault();
this.goToSelector( elementHref );
});
},
goToSelector( selector ) {
const element = document.querySelector( selector );
if ( ! element ) {
return;
}
element.scrollIntoView( { behavior: ‘smooth’ } );
}
};
document.addEventListener(
‘DOMContentLoaded’,
() => window.TastyRecipes.smoothScroll.init()
);
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.cookMode = {
wakeLockApi: false,
wakeLock: false,
cookModeSelector: ‘.tasty-recipes-cook-mode’,
init() {
if (“wakeLock” in navigator && “request” in navigator.wakeLock) {
this.wakeLockApi = navigator.wakeLock;
}
const cookModes = document.querySelectorAll(this.cookModeSelector);
if (cookModes.length > 0) {
for (const cookMode of cookModes) {
if (this.wakeLockApi) {
cookMode.querySelector(‘input[type=”checkbox”]’).addEventListener(“change”, event => {
this.checkboxChange(event.target);
}, false);
} else {
cookMode.style.display = “none”;
}
}
}
},
checkboxChange(checkbox) {
if (checkbox.checked) {
this.lock();
} else {
this.unlock();
}
},
setCheckboxesState(state) {
const checkboxes = document.querySelectorAll(this.cookModeSelector + ‘ input[type=”checkbox”]’);
for (const checkbox of checkboxes) {
checkbox.checked = state;
}
},
async lock() {
try {
this.wakeLock = await this.wakeLockApi.request(“screen”);
this.wakeLock.addEventListener(“release”, () => {
this.wakeLock = false;
this.setCheckboxesState(false);
});
this.setCheckboxesState(true);
} catch (error) {
this.setCheckboxesState(false);
}
},
unlock() {
if (this.wakeLock) {
this.wakeLock.release();
this.wakeLock = false;
}
this.setCheckboxesState(false);
}
};
(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
document.addEventListener(“DOMContentLoaded”, callback);
}
})(() => {
window.TastyRecipes.cookMode.init();
});
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.staticTooltip = {
element: null,
tooltipElement: null,
deleting: false,
init( element ) {
if ( this.deleting ) {
return;
}
this.element = element;
this.buildElements();
},
destroy() {
if ( ! this.tooltipElement || this.deleting ) {
return;
}
this.deleting = true;
this.tooltipElement.classList.remove( ‘opened’ );
setTimeout( () => {
this.tooltipElement.remove();
this.deleting = false;
}, 500 );
},
buildElements() {
const tooltipElement = document.createElement( ‘div’ );
tooltipElement.classList.add( ‘tasty-recipes-static-tooltip’);
tooltipElement.setAttribute( ‘id’, ‘tasty-recipes-tooltip’ );
const currentTooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
if ( currentTooltipElement ) {
document.body.replaceChild( tooltipElement, currentTooltipElement );
} else {
document.body.appendChild( tooltipElement );
}
this.tooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
},
show() {
if ( ! this.tooltipElement ) {
return;
}
const tooltipTop = this.element.getBoundingClientRect().top
+ window.scrollY
– 10 // 10px offset.
– this.tooltipElement.getBoundingClientRect().height;
const tooltipLeft = this.element.getBoundingClientRect().left
– ( this.tooltipElement.getBoundingClientRect().width / 2 )
+ ( this.element.getBoundingClientRect().width / 2 ) – 1;
const posLeft = Math.max( 10, tooltipLeft );
this.maybeRemoveTail( posLeft !== tooltipLeft );
this.tooltipElement.setAttribute( ‘style’, ‘top:’ + tooltipTop + ‘px;left:’ + posLeft + ‘px;’ );
this.tooltipElement.classList.add( ‘opened’ );
},
maybeRemoveTail( removeTail ) {
if ( removeTail ) {
this.tooltipElement.classList.add( ‘tr-hide-tail’ );
} else {
this.tooltipElement.classList.remove( ‘tr-hide-tail’ );
}
},
changeMessage( message ) {
if ( ! this.tooltipElement ) {
return;
}
this.tooltipElement.innerHTML = message;
}
};
window.TastyRecipes.ajax = {
sendPostRequest( url, data, success, failure ) {
const xhr = new XMLHttpRequest();
xhr.open( ‘POST’, url, true );
xhr.send( this.preparePostData( data ) );
xhr.onreadystatechange = () => {
if ( 4 !== xhr.readyState ) {
return;
}
if ( xhr.status === 200 ) {
success( JSON.parse( xhr.responseText ) );
return;
}
failure( xhr );
};
xhr.onerror = () => {
failure( xhr );
};
},
preparePostData( data ) {
const formData = new FormData();
for ( const key in data ) {
formData.append( key, data[key] );
}
return formData;
},
};
window.TastyRecipes.ratings = {
defaultRating: 0,
currentRatingPercentage: 100,
savingRating: false,
init( minRating ) {
this.minRating = minRating;
this.formWatchRating();
this.closeTooltipWhenClickOutside();
this.addBodyClassBasedOnSelectedRating();
this.backwardCompFormRatingPosition();
},
formWatchRating() {
const ratings = document.querySelectorAll(‘.tasty-recipes-no-ratings-buttons [data-rating]’);
if ( ratings.length {
event.preventDefault();
this.defaultRating = event.target.closest( ‘.checked’ ).dataset.rating;
this.setCheckedStar( event.target );
this.maybeSendRating( this.defaultRating, event.target );
this.setRatingInForm( this.defaultRating );
} );
}
},
closeTooltipWhenClickOutside() {
window.addEventListener( ‘click’, e => {
// Bailout (don’t remove the tooltip) when the clicked element is a rating star, or it’s the tooltip itself.
if ( e.target.closest( ‘.tasty-recipes-rating’ ) || e.target.classList.contains( ‘tasty-recipes-static-tooltip’ ) ) {
return;
}
window.TastyRecipes.staticTooltip.destroy();
} );
},
setRatingInForm( rating ) {
const ratingInput = document.querySelector( ‘#respond .tasty-recipes-rating[value=”‘ + rating + ‘”]’ );
if ( ! ratingInput ) {
return;
}
ratingInput.click();
},
addBodyClassBasedOnSelectedRating() {
const ratingInputs = document.querySelectorAll( ‘input.tasty-recipes-rating’ );
if ( ! ratingInputs ) {
return;
}
for ( const ratingInput of ratingInputs ) {
ratingInput.addEventListener( ‘click’, currentEvent => {
const selectedRating = currentEvent.target.getAttribute( ‘value’ );
this.handleBodyClassByRating( selectedRating );
this.toggleCommentTextareaRequired( selectedRating );
} );
}
},
handleBodyClassByRating( rating ) {
if ( rating < this.minRating ) {
document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );
return;
}
document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );
},
toggleCommentTextareaRequired( rating ) {
const commentTextarea = document.getElementById( 'comment' );
if ( ! commentTextarea ) {
return;
}
if ( rating {
window.TastyRecipes.staticTooltip.changeMessage( response.data.message );
window.TastyRecipes.staticTooltip.show();
this.updateAverageText( response.data, recipeCardElement );
this.maybeFillCommentForm( response.data );
// Hide the tooltip after 5 seconds.
setTimeout( () => {
this.maybeResetTooltip( recipeCardElement, response.data, rating );
}, 5000 );
},
() => {
this.resetTooltip( recipeCardElement );
}
);
},
updateAverageText( data, recipeCardElement ) {
if ( ! data.average ) {
return;
}
this.setRatingPercent( data );
if ( ! data.count ) {
return;
}
const quickLink = document.querySelector( ‘.tasty-recipes-rating-link’ );
if ( quickLink ) {
this.setTextInContainer( quickLink, data );
this.setPartialStar( quickLink );
}
const cardStars = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
cardStars.dataset.trDefaultRating = data.average;
this.setTextInContainer( recipeCardElement.querySelector( ‘.tasty-recipes-rating’ ), data );
},
setTextInContainer( container, data ) {
if ( ! container ) {
return;
}
if ( data.label ) {
const ratingLabelElement = container.querySelector( ‘.rating-label’ );
if ( ratingLabelElement ) {
ratingLabelElement.innerHTML = data.label;
}
return;
}
const averageElement = container.querySelector( ‘.average’ );
if ( averageElement ) {
averageElement.textContent = data.average;
}
const countElement = container.querySelector( ‘.count’ );
if ( countElement ) {
countElement.textContent = data.count;
}
},
setPartialStar( container ) {
const highestStar = container.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( highestStar ) {
highestStar.dataset.trClip = this.currentRatingPercentage;
}
},
setRatingPercent( data ) {
this.defaultRating = data.average.toFixed( 1 );
const parts = data.average.toFixed( 2 ).toString().split( ‘.’ );
this.currentRatingPercentage = parts[1] ? parts[1] : 100;
if ( this.currentRatingPercentage === ’00’ ) {
this.currentRatingPercentage = 100;
}
},
setCheckedStar( target ) {
const cardRatingContainer = target.closest( ‘.tasty-recipes-ratings-buttons’ );
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( selectedRatingElement ) {
delete selectedRatingElement.dataset.trChecked;
}
const thisStar = target.closest( ‘.tasty-recipes-rating’ );
thisStar.dataset.trChecked = 1;
thisStar.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = 100;
},
maybeFillCommentForm( data ) {
if ( ! data.comment || ! data.comment.content ) {
return;
}
const commentForm = document.querySelector( ‘#commentform’ );
if ( ! commentForm ) {
return;
}
const commentBox = commentForm.querySelector( ‘[name=comment]’ );
if ( ! commentBox || commentBox.value ) {
return;
}
// Add comment details for editing.
commentBox.innerHTML = data.comment.content;
if ( data.comment.name ) {
commentForm.querySelector( ‘[name=author]’ ).value = data.comment.name;
commentForm.querySelector( ‘[name=email]’ ).value = data.comment.email;
}
},
maybeResetTooltip( recipeCardElement, data, rating ) {
if ( this.savingRating === rating ) {
this.resetTooltip( recipeCardElement, data );
}
},
resetTooltip( recipeCardElement, data ) {
window.TastyRecipes.staticTooltip.destroy();
this.savingRating = false;
// Reset the default rating.
const cardRatingContainer = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
if ( cardRatingContainer ) {
this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;
cardRatingContainer.dataset.trDefaultRating = this.defaultRating;
this.resetSelectedStar( cardRatingContainer, data );
}
},
resetSelectedStar( cardRatingContainer ) {
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( selectedRatingElement ) {
selectedRatingElement.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = this.currentRatingPercentage;
selectedRatingElement.parentNode.dataset.trChecked = 1;
}
const previousSelectedElement= cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( previousSelectedElement ) {
const currentSelectedRating = previousSelectedElement.querySelector(‘[data-rating]’);
if ( currentSelectedRating !== selectedRatingElement ) {
delete previousSelectedElement.dataset.trChecked;
}
}
},
backwardCompFormRatingPosition() {
const ratingsButtons = document.querySelector( ‘#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons’ );
if ( ! ratingsButtons ) {
return;
}
const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);
if ( ! ratingsButtonsStyles.display.includes( ‘flex’ ) ) {
ratingsButtons.style.direction = ‘rtl’;
}
if ( typeof tastyRecipesRating !== ‘undefined’ ) {
// Select the rating that was previously selected in admin.
ratingsButtons.querySelector( ‘.tasty-recipes-rating[value=”‘ + tastyRecipesRating + ‘”]’ ).checked = true;
}
const ratingSpans = ratingsButtons.querySelectorAll( ‘.tasty-recipes-rating’ );
for (const ratingSpan of ratingSpans) {
ratingSpan.addEventListener( ‘click’, event => {
if ( ratingSpan === event.target ) {
return;
}
ratingSpan.previousElementSibling.click();
} );
}
}
};
(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
window.addEventListener( ‘load’, callback );
}
})(() => {
window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );
});
Crockpot Meatball Soup FAQs
Can I use homemade meatballs?
Sure! If you have them on hand or feel like making them, you could brown them and let them cook right in the crockpot or add ones you’ve previously made and frozen.
Do I have to add tortellini? Can I make gluten-free crockpot meatball soup?
Nope. I made this soup for my parents and forgot to tell them to add the tortellini and they both said it was great as is. You can also easily use a different type or shape of pasta.
To make this recipe gluten-free, use gluten-free tortellini or other gluten-free pasta, or leave out the pasta completely!
How to store crockpot meatball soup? Can you freeze slow cooker meatball tortellini soup?
Let cool and store in a glass container in the fridge for up to 4 days. Or portion into containers (like Souper Cubes – aff link) and freeze for later. If you’re planning to freeze, make the soup to freeze and cook the pasta when ready to serve.
How to reheat crockpot meatball soup with tortellini?
You can reheat this soup either in the microwave or on the stovetop. If the soup thickens after cooling or the pasta absorbs some of the liquid, feel free to add more broth when reheating.
Can I make vegetarian crockpot meatball soup?
Feel free to use store-bought plant-based meatballs, or make your own with a recipe like Vegan Meatball Soup. You could also swap the meatballs for mushrooms!
What if I’m looking for a recipe for crockpot swedish meatballs with cream of mushroom soup?
If you’re looking for a creamy meatball dish, you could definitely give this recipe a Swedish twist. Try replacing the diced and crushed tomatoes with two cans of cream of mushroom soup. You could also skip the Italian seasoning and add some Worchestershire sauce and a little nutmeg.
To keep things super simple, just throw frozen meatballs in the crockpot with cream of mushroom soup and serve over noodles.
If you need a specific recipe, try:
Crockpot Meatball Soup with Tortellini
Want more soup recipes? Try:
Enjoy!
–Lindsay–