How to Paint a Concrete Floor: Basement, Garage, and Porch
Residential concrete floor painting — moisture testing, profile, primer, and the three product systems that hold up. What bites you in two years if you skip prep.
Concrete looks bombproof. Then you paint it without testing for vapor, and a year later the coating comes off in patches the size of a dinner plate. Residential slabs are forgiving compared to a warehouse floor right up until they aren’t, and then they’re worse, because nobody warned you.
TL;DR
- Wait: new concrete cures 28+ days before any coating
- Test: calcium chloride dome (ASTM F1869) and a 24-hour plastic-sheet check for vapor
- Profile: acid etch or grind to CSP 2–3. Never coat a smooth troweled slab.
- Primer: water-based epoxy primer for garages and porches; dampproofing primer (Drylok or Watertite) for interior basements
- Paint: Behr Granite Grip for porches, Rust-Oleum EpoxyShield for garages, Sherwin-Williams ArmorSeal 1000HS for vehicle traffic that doesn’t need a commercial spec
- Cure: 24 hours to walk on, 7 days to park on, 14 days for a wash-down
What this guide is, and isn’t
This is a residential concrete article. Garage, basement, porch, walk-out patio, sometimes a sun-room slab. No DFT specifications. No thermoplastic striping. No ICRI inspector signing off on the profile. If you need that, the warehouse epoxy guide is the spec-driven sibling. Same chemistry class, different rules.
What residential and commercial concrete share: vapor drive, surface profile, contamination, and a 28-day cure window. Skip any of those four and the topcoat fails. The difference is a homeowner’s failure shows up as a peeling spot under the workbench, not a $400,000 re-pour.
What you’re actually painting
A residential slab is a few inches of cement-and-aggregate poured over gravel, with (in basements) a poly vapor barrier that may or may not still be intact thirty years later. The slab is porous. It moves water, salts, and gases up through that porosity continuously. The coating you put on top has to bond mechanically to a profiled surface, tolerate vapor coming up from underneath, and resist whatever the room throws at it.
Most failures come from skipping the vapor part. You won’t see it until the coating starts to lift.
Substrate states
Before you buy paint, figure out which of these you’re dealing with:
New concrete (under 28 days). Don’t paint it. The slab is still releasing alkaline water and the pH at the surface is hostile to almost every coating. Wait 28 days, 60 in cool weather. I’ve watched contractors lose money on slabs they sealed at day 14.
Old concrete in good shape (5–30 years, no visible damage). Your most likely scenario. Profile, test, prime, paint. The middle of this article is written for you.
Old concrete with efflorescence. White crystalline bloom on the surface means salts are migrating up through the slab with moisture. Brush off the powder, but don’t paint until you know where the moisture is coming from. The efflorescence fix walks through the diagnosis.
Old concrete with oil staining. Garage floors. Any coating over soaked-in oil lifts at the stain in 6 months. Degrease, poultice with a kitty-litter-and-mineral-spirits paste overnight, rinse, re-degrease, etch. If the stain ghosts after that, spot-prime with a stain-blocking shellac primer (Zinsser BIN) before the floor primer goes down.
Old concrete with road-salt damage. Walk-out garages and porches in zones 5 and colder. The slab face is spalled and chloride-loaded. Patch the spalls with a portland-based concrete patcher, etch, and use an exterior-rated coating only. Interior garage floor paint fails outdoors in one winter.
The two moisture tests you can’t skip
This is where most basement floors get killed. Run both before you spend a dime on coating.
Test 1, plastic sheet (free, 24 hours). Tape a 2-foot square of clear plastic sheeting flat to the slab on all four sides. Wait 24 hours. If the underside of the plastic is wet or the concrete underneath has darkened, you’ve got vapor. This is the back-of-envelope check. Run it in three or four spots: corners, middle, near a foundation wall.
Test 2, calcium chloride (ASTM F1869, $25 kit, 60–72 hours). A pre-weighed dish of calcium chloride salt sealed under a clear plastic dome, taped airtight to the slab. Re-weigh after the cure. The weight gain converts to lb of water vapor per 1000 sq ft per 24 hours. The pass/fail line: 3 lb or under is paintable. Above that, you need a vapor barrier primer or you cancel the project.
Most basement slabs over 5 years old test 4–8 lb. Most attached garages on grade test 1–3 lb. Walk-out porches vary wildly. Run the test. The kit costs less than one gallon of the paint you’re about to lift off.
If you fail, your options are: install a true MVE barrier primer (ArmorSeal 1K HS, Sika MVE Stop), or seal the slab with an impregnating silicate sealer instead of a film coating. Film coatings over a vapor-failing slab will not last.
Profile to CSP 2–3
Coating manufacturers ask for an ICRI surface profile of CSP 2 or 3 for residential floor paint. CSP stands for Concrete Surface Profile. CSP 1 is a glass-smooth troweled finish; a coating won’t grip it. CSP 5 is a heavily scarified industrial profile, overkill for residential and a pain to fill. You’re aiming for the texture of 80- to 100-grit sandpaper under your fingertip.
Two ways to get there:
Acid etch (DIY, $30–$60). Muriatic acid diluted 4:1 with water, or pre-packaged etching crystals. Sprayed onto a damp slab with a pump-up garden sprayer, scrubbed in with a stiff brush until the foaming dies down (about 10 minutes), rinsed twice. Wear chemical goggles and a respirator. Ventilate. Do not skip the second rinse; leftover acid neutralizes your primer. Etching gives you CSP 1–2 reliably and CSP 2–3 on softer slabs. Good enough for porches, basements, and most garages.
Diamond grinding (rental, $80/day for the grinder plus $15 for diamond pads). Walk-behind grinder with a 3-disc head and a HEPA-shrouded vacuum attached. Loud, dusty, 1500 sq ft per day. Gives you a clean CSP 2–3 with no acid residue. The right answer if you’re coating an entire 600 sq ft garage. Overkill for a 100 sq ft porch.
Etch and you can get away with one weekend. Grind and the prep is faster, but the rental and the dust collection add a step.
Primer, matched to the room
The primer choice is where residential splits from commercial.
For interior basements: dampproofing primer first. Drylok Etch (the version with built-in profile) or Zinsser Watertite. These are formulated to handle vapor pressure from underneath and will hold a topcoat through normal seasonal moisture cycling. Don’t use a generic concrete primer here. It isn’t designed for hydrostatic pressure and will fail.
For garages and exterior porches: water-based epoxy primer. The primer that ships in the Rust-Oleum EpoxyShield kit is fine. For porches, use a masonry-rated penetrating primer (Behr Concrete & Masonry Bonding Primer is the cheap version; Loxon by Sherwin-Williams is the pro version). Penetrating primers soak into the open pore structure created by the etch and lock the dust down.
For previously-painted concrete in good shape: scuff-sand with 80-grit on a pole sander, vacuum, and use a bonding primer (INSL-X Stix). Don’t strip if the existing coating is bonded and sound. Strip if it’s flaking. Patches of peeling under a new coat lift the new coat with them.
One coat of primer, full coverage, no holidays. Roll it in two directions. Let it cure to the manufacturer’s spec, usually 4 hours for water-based, overnight if temperatures are below 65°F.
Product systems
Three real-world options, ranked by use case:
Behr Premium Granite Grip (textured one-step). A latex-based, gritty-textured floor coating sold at Home Depot. One-coat application over the bonding primer. The texture provides built-in slip resistance, which makes it the right answer for porches, walkways, and basement steps where bare-foot grip matters. Limited durability under tire traffic; don’t put it in an active garage. Service life on a porch with a yearly hose-down is 3–5 years before it needs a recoat.
Rust-Oleum EpoxyShield Garage Floor Coating Kit (true 2-part epoxy). The big-box garage coating that actually performs. Two-part: you mix Part A and Part B, you have a 2-hour pot life, and you have to use it before it sets up in the bucket. Includes anti-slip flakes (the “decorative chips”) that you broadcast into the wet first coat. Service life on a daily-driver garage is 5–7 years if the prep was right. Not commercial-grade, but the best DIY epoxy at the price point. Use the kit, not the single-component “garage paint” sold next to it on the shelf. Those are latex with epoxy in the name and they fail.
Sherwin-Williams ArmorSeal 1000HS. The same product spec’d in the warehouse guide, but homeowners can buy it at SW pro stores. Use case: a residential workshop, a hobbyist’s garage that sees vehicle traffic, a finished basement that doubles as a workout room with rubber mats over the floor. Two-part epoxy, 8–10 mil DFT, 7–10 year residential service life. The price is real ($75–95/gal vs Rust-Oleum’s $100/kit), but you get a product that won’t blink at hot tires or chemical spills. Sits between the DIY Rust-Oleum and a true commercial install.
Skip any single-component “garage paint” that promises one-coat coverage at $30/gallon. Skip rust-converters and “all-in-one” coatings sold at auto-parts stores. Skip tinted concrete sealers for a working surface; they’re for color, not durability.
Application windows
Temperature. Slab temp 50–85°F at the time of application and for the next 24 hours. Below 50°F the coating doesn’t crosslink. Above 85°F the pot life cuts in half and you’ll fight the wet edge. Use a surface thermometer on the slab itself. Air temp lies, especially in a basement where the slab is 8°F colder than the room.
Humidity. Below 85% RH while applying. Above that, the coating skins over before it can lay down. Run a dehumidifier for 24 hours before you start in a basement.
Recoat windows. Manufacturer dependent, but the rough rule is 4–24 hours between coats. Miss the window and you have to scuff-sand before the second coat. Don’t trust the can; read the technical data sheet on the manufacturer’s website. The can label rounds up. The TDS gives you the real numbers.
Hot tire pickup avoidance. The biggest garage floor failure mode. A warm tire on a not-fully-cured coating softens the topcoat enough to lift it as the car cools. Prevention: full 7-day cure before you park on the floor. Not 24 hours. Not “until it feels dry.” Seven days. If you can’t keep the car out a week, hold the project.
Anti-slip on porches and thresholds. Broadcast glass beads or aluminum-oxide grit into the second-to-last coat while wet. Backroll to embed, topcoat over it. Skip this on porches and steps and you’ve built an ice rink.
Failure modes (what’ll bite you in two years)
- Peeling at expansion joints. The slab moves. The coating doesn’t. The first place the bond gives is the saw-cut control joint. Fix: caulk the joints with a self-leveling polyurethane sealant (Sikaflex 1c SL) before you prime. Bridge a joint wider than 1/4 inch with bond-breaker tape.
- Vapor blisters. Dime- to silver-dollar-sized lift in the coating. Cause: vapor drive that you didn’t test for. There’s no fast fix; you cut the blister out, re-test, install a vapor primer, recoat. Don’t skip the moisture test.
- Hot tire pickup. Black, sticky lifted patches at the parking spots. Cause: cured too short before driving on it. Recovery: scuff, spot-prime with bonding primer, recoat. Don’t repark for 14 days.
- Road-salt blooming. White crystalline patches on exterior porches in spring. Cause: chlorides driven into the slab in winter migrating out as the slab dries. Rinse in spring, watch for soft coating, recoat affected areas.
- Powdering in basement corners. Coating turns to dust where it meets the foundation wall. Cause: capillary moisture wicking up at the wall-floor junction. Fix: seal the cove with a hydraulic cement product before priming, then run the floor coating up the wall 1 inch.
Common mistakes
- Painting a 14-day-old slab. It feels dry. It isn’t cured. Wait the 28 days.
- Skipping the moisture test on a basement. This is the single biggest failure cause. The kit is $25.
- Using interior garage paint on an exterior porch. It won’t survive the first winter.
- One coat of primer, called good. Two coats if the slab drinks the first one in unevenly. Hit the dry spots before color.
- Topcoating before the recoat window. Read the TDS. The can label is optimistic.
- Parking at 48 hours because it feels hard. It feels hard. It isn’t cured. Seven days.
Maintenance & longevity
A properly installed residential floor coating lasts 5–10 years. Garages with daily driver traffic: refresh the high-wear path under the tires every 5 years. Basements with light foot traffic: 8–10 years before visible wear. Exterior porches: re-seal every 3 years, full recoat at year 7–10.
Clean with a damp mop and a pH-neutral floor cleaner. Avoid bleach and high-alkaline cleaners; they soften the coating over time. Walk off salt and grit at the door in winter. The grit grinds the coating like sandpaper. A $20 walk-off mat at the garage door buys you two extra years on the coating around the threshold.
A painted concrete floor is a maintenance system, not a forever finish. Plan for the recoat. Save the kit’s color match info. The coating you put down right rewards you in five years: scuff and refresh, instead of strip and start over.