This heart-shaped bag holder hangs on a wall hook and keeps your plastic grocery bags in one place. You push the bags in through the opening at the top and pull them out one at a time through the narrow ruffled cuff at the bottom.
The front has a cream heart in the center, then raspberry pink rounds, then a cream scalloped lace frill that sits on top of the fabric, more pink rounds, and a cream scalloped edge. The back is plain raspberry. A pink strap goes over the hook, and the cuff ends in a cream ruffle.
The pattern uses US crochet terms. The finished holder is about 9 in (22.9 cm) wide and 11 in (27.9 cm) tall including the cuff. The strap loop rises about 6 in (15.2 cm) above the top edge.
You make two heart panels in joined rounds. They are the same size, but the front has the colorwork and a front-loop lace frill. The panels are seamed together along both sides, which leaves an opening at the top and one at the point. A tapered cuff is worked in rounds from the bottom opening, then you add the top edging and the strap.
Finished Size and Construction
- Finished size: 9 in (22.9 cm) wide x 11 in (27.9 cm) tall, cuff included
- Skill level: Intermediate
- Terminology: US
- Yarn weight: Worsted (#4) cotton
- Hook: 4.5 mm (US 7)
- Number of pieces: 3 (front panel, back panel, strap), plus a cuff worked onto the joined body
- Layout: Front panel stacked on the back panel, wrong sides together
- Piece size: each panel is 7.75 in (19.7 cm) wide x 7.25 in (18.4 cm) tall after Round 9
- Size before border: 7.75 in (19.7 cm) wide, the joined panels
- Border depth: about 0.6 in (1.5 cm) for the seam round plus scallops
Materials
Use a smooth, mercerized or matte worsted-weight cotton. Cotton holds the heart shape, keeps the scallops crisp, and doesn’t stretch when the holder is stuffed with bags. Acrylic will work, but the panels may sag.
- Raspberry pink (main color): 80 g, about 125 m
- Cream (contrast color): 40 g, about 62 m
These quantities include a margin of about 15%.
Tools:
– 4.5 mm (US 7) crochet hook
– Tapestry needle
– 4 locking stitch markers
– Scissors
– Rustproof pins and a steam iron or a spray bottle for blocking
Abbreviations (US Terms)
- ch – chain
- sl st – slip stitch
- sc – single crochet
- dc – double crochet
- tr – treble crochet
- sc2tog – single crochet 2 together
- BLO / FL – back loop only / front loop
- st(s) – stitch(es)
- sk – skip
- sp – space
Picot: ch 3, sl st in the 3rd ch from the hook.
Scallop: (2 dc, picot, 2 dc) all in the same stitch.
Half: every heart round has two halves. Half A runs from the top dip down to the point. Half B runs from the point back up to the dip. Stitches in each half are numbered from the dip. Each half’s count includes the one dc worked at the point.
Gauge and Checkpoints
- Double crochet: 16 dc and 9 rounds = 4 in (10.2 cm)
- Single crochet: 18 sc and 20 rounds = 4 in (10.2 cm)
Make the front panel first and check it against the checkpoints before you start the back. Both panels have to match stitch for stitch to join cleanly.
- After Round 3 (cream heart): 2.75 in (7.0 cm) wide
- After Round 5: 4.5 in (11.4 cm) wide
- After Round 6: 5 in (12.7 cm) wide
- After Round 9: 7.75 in (19.7 cm) wide x 7.25 in (18.4 cm) tall, from lobe top to point
- After the seam and scallops: 9 in (22.9 cm) wide
If the panel is too big, go down half a hook size. If it’s too small, go up half a size. A change of one stitch per 4 in (10.2 cm) moves the panel width by about 0.5 in (1.3 cm). If the panel ruffles, your dc is looser than gauge. If it cups, your dc is tighter.

Front Panel
Every round starts at the top dip. Turning chains do not count as stitches. At the end of each round, sl st in the first stitch of the round (not the turning chain). Don’t turn between rounds.
Round 1 (cream): Make a magic ring. Ch 3, 3 tr, 5 dc, ch 2, 5 dc, 3 tr, ch 3, sl st in ring. Pull the ring closed firmly so the two tr groups form the lobes. (16 sts: 8 per half, plus the point ch-2 sp)
Round 2 (cream): Ch 3. Half A: 2 tr in each of the next 3 sts, 2 dc in each of the next 2 sts, dc in the next 3 sts. (Dc, ch 2, dc) in the point sp. Half B: dc in the next 3 sts, 2 dc in each of the next 2 sts, 2 tr in each of the next 3 sts. Sl st to the first tr. (28 sts: 14 per half)
Round 3 (cream): Ch 2. Half A: [dc in the next st, 2 dc in the next st] 5 times, dc in the next 4 sts. (Dc, ch 2, dc) in the point sp. Half B: dc in the next 4 sts, [2 dc in the next st, dc in the next st] 5 times. Sl st to the first dc. Fasten off. (40 sts: 20 per half)
Checkpoint: the cream heart is 2.75 in (7.0 cm) wide.
Round 4 (pink): Join pink at the dip. Ch 2. Half A: [dc in the next 2 sts, 2 dc in the next st] 5 times, dc in the next 5 sts. (Dc, ch 2, dc) in the point sp. Half B: mirror Half A. (52 sts: 26 per half)
Round 5 (pink): Ch 2. Half A: [dc in the next 3 sts, 2 dc in the next st] 5 times, dc in the next 6 sts. (Dc, ch 2, dc) in the point sp. Half B: mirror. Fasten off. (64 sts: 32 per half)
Round 6 (cream, frill base): Join cream at the dip. Ch 1. Sc in each of the 32 sts of Half A, (sc, ch 2, sc) in the point sp, then sc in each of the 32 sts of Half B. Fasten off. (66 sts: 33 per half)
This round’s front loops will hold the lace frill later.
Round 7 (pink): Join pink at the dip. Ch 2. Work this round in BLO only. Half A: [dc in the next 4 sts, 2 dc in the next st] 4 times, dc in the next 13 sts. (Dc, ch 2, dc) in the point sp. Half B: mirror. (76 sts: 38 per half)
The increase is smaller here because the sc round before it is short.
Round 8 (pink): Ch 2, working in both loops again. Half A: [dc in the next 5 sts, 2 dc in the next st] 5 times, dc in the next 8 sts. (Dc, ch 2, dc) in the point sp. Half B: mirror. (88 sts: 44 per half)
Round 9 (pink): Ch 2. Half A: [dc in the next 6 sts, 2 dc in the next st] 5 times, dc in the next 9 sts. (Dc, ch 2, dc) in the point sp. Half B: mirror. Fasten off. (100 sts: 50 per half)
Checkpoint: 7.75 in (19.7 cm) wide x 7.25 in (18.4 cm) tall.
Lace Frill
Join cream in the unused FL of the first Round 6 stitch at the dip. Half A: [sc in the next FL, sk 1 FL, scallop in the next FL] 11 times. Sl st in the Round 6 point ch-2 sp. Half B: repeat the bracket 11 times. Sl st to the first sc. Fasten off. (22 scallops: 11 per half)
Each half uses 33 front loops: 11 repeats x 3 loops. The frill sits on top of the pink fabric with its scallops pointing outward, so it frames the inner heart.
Back Panel
Work Rounds 1 to 9 entirely in pink, using the same counts as the front panel. Work Round 6 in sc and Round 7 through both loops. Skip the frill. The back panel finishes at 100 sts (50 per half) and must match the front at 7.75 in (19.7 cm) wide.
Make All Pieces
- Front panel: 1 (cream Rounds 1–3 and 6 plus frill; pink Rounds 4–5 and 7–9)
- Back panel: 1 (all pink)
- Strap: 1 (pink). Ch 61, sc in the 2nd ch from the hook and in each ch across. (60 sc, about 13.25 in / 33.7 cm)
Layout (side view, stacked):
[ FRONT panel - right side out ]
[ BACK panel - right side out ]
wrong sides together, dips and points aligned
Joining
Lay the back panel down with its right side facing down. Place the front on top with its right side facing up. Line up the dips and the points. Number the Round 9 stitches of each half 1 to 50 from the dip, and put markers on stitches 10 and 45 of each half on both panels.
- Stitches 1–9 of each half stay open: this is the top opening, 18 sts per panel.
- Stitches 10–45 of each half are joined: 36 sts per side.
- Stitches 46–50 of each half plus the point sp stay open: this is the bottom opening.
Seam A (cream): Join through stitch 10 of Half A on both layers. Sc through both layers, front stitch to matching back stitch, in stitches 10 to 45. Fasten off. (36 sc)
Seam B (cream): Join through stitch 45 of Half B and sc through both layers up to stitch 10. Fasten off. (36 sc)
Each panel has 36 stitches on that side, and each pair is joined into one sc. No stitches are added at the seam. Keep the tension even, a little looser than the panel rounds, so the edge lies flat and doesn’t pull in. Checkpoint: the joined body is still 7.75 in (19.7 cm) wide.
Border
The border is worked in cream into the seam stitches, with the same sc gauge as above. It adds about 0.6 in (1.5 cm) on each side.
Scallop edge (each seam): Join cream in the first seam sc. [Sc in the next sc, sk 1, scallop in the next sc] 12 times. Fasten off. Repeat on the second seam. (12 scallops per side, 24 total)
The math: each repeat uses 3 sts and 12 x 3 = 36, which matches the 36 seam sc exactly. The last scallop sits right at the bottom opening.
Top edge, Round 1 (cream): Join in any top-opening stitch. Sc in each of the 18 front stitches and the 18 back stitches. Sl st to the first sc. (36 sc)
Top edge, Round 2 (cream): [Sc in the next 2 sts, picot] 18 times. Sl st to the first sc. Fasten off. (18 picots)
The top opening measures about 4.5 in (11.4 cm) across each panel.
Cuff
Round 1 (pink): Join at stitch 46 of Half A on the front. Sc in stitches 46–50, 2 sc in the point sp, then sc in stitches 50–46 of Half B (12). Continue the same way around the back (12). (24 sc) Keep the stitches firm where the cuff meets the seams so you don’t leave a gap.
Round 2 (pink): [Sc in the next 4 sts, sc2tog] 4 times. (20 sc)
Rounds 3–10 (pink): Sc in each st around. (20 sc)
Round 11 (cream): Sc in each st around. (20 sc)
Round 12 (cream): [Sc in the next st, 5 dc in the next st] 10 times. Sl st to the first sc. Fasten off. (10 ruffle shells)
The cuff is about 2.75 in (7.0 cm) long. The opening is about 4.5 in (11.4 cm) around, which is snug enough to hold the bags and loose enough to let one pull through.
Strap: Sew one end of the strap to the inside of the back panel at the top of each seam, 0.5 in (1.3 cm) below the edge. The loop rises about 6 in (15.2 cm).
Final Blocking
- Weave in all ends on the inside of the pouch.
- Stuff the body loosely with a folded hand towel to set the heart shape.
- Pin the lobes and the point to 9 in (22.9 cm) wide x 11 in (27.9 cm) tall, cuff included.
- Pin each frill scallop and edge scallop so it points outward.
- Steam lightly from 1 in (2.5 cm) above, or mist with water. Don’t press.
- Let it dry completely before you unpin it and remove the towel.
Final Quality-Control Checklist
- Both panels have 100 sts (50 per half) in Round 9.
- There are 22 frill scallops, 11 per half.
- Each seam has 36 sc and 12 scallops.
- The top edge has 36 sc and 18 picots.
- The cuff narrows from 24 to 20 sc and ends in 10 shells.
- The strap is sewn level at both lobes.
- The finished holder measures 9 in (22.9 cm) x 11 in (27.9 cm).
Troubleshooting
- The heart turns round instead of pointed: make sure each point gets (dc, ch 2, dc) in the ch-2 sp, not in the stitch next to it.
- The dip fills in: start every round right at the dip and join to the first stitch, not to the turning chain.
- The frill is crowded: check that you skip one FL between the sc and the scallop.
- The panels don’t match: count each half separately. Most errors are a missing increase in one half.
- Bags fall out on their own: go down a hook size for the cuff only, or work one extra sc2tog round to bring it to 18 sc.
- The seams pucker: rework them with a looser tension. Don’t add stitches.
Care
Hand wash in cool water, roll it in a towel, and dry it flat in shape. Reshape the scallops while the holder is damp.

Final Notes
The measurements build on each other. A 2.75 in (7.0 cm) cream heart grows to a 7.75 in (19.7 cm) panel. Two matching panels with 100 sts each join along two 36-stitch seams. Twelve scallops per side bring the width to 9 in (22.9 cm), and the 2.75 in (7.0 cm) cuff brings the height to 11 in (27.9 cm). If you check gauge at each checkpoint, the finished holder will come out at the right size.
Happy crocheting!