---
title: "Must have, should have, could have"
level: C1
chapter: "Verbs in time"
canonical: https://www.dutchfluency.com/grammar/modal-perfect
updated: 2026-10-09
author: Dutch Fluency
license: CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/)
---

# Must have, should have, could have

To say that something must have happened, keep _moeten_ in the present and end with a past participle (the form like _gemist_ or _vergeten_) plus _hebben_ or _zijn_: _Hij moet het vergeten zijn_ (He must have forgotten). For something that should or could have happened but did not, use _had_ (or _hadden_ with a plural subject) with _moeten_ or _kunnen_ and an infinitive (the dictionary form, like _zeggen_): _Je had het eerder moeten zeggen_ (You should have said so sooner). For an open maybe, say _Dat zou kunnen_ (That's possible).

## The pattern

> To guess about the past, use a modal (a verb like _moeten_ or _kunnen_) in the present and put the participle with _hebben_ or _zijn_ at the end. For a missed chance, put _had_ (singular) or _hadden_ (plural) in second place, with _moeten_ or _kunnen_ plus an infinitive at the end.

- **Must have** (a confident guess): _Ze moet de bus gemist hebben._ Use the helper verb the main verb takes in the perfect tense (_ik heb gewerkt_): _gemist hebben_, but _vertrokken zijn_. See [hebben or zijn](https://www.dutchfluency.com/grammar/hebben-or-zijn).
- **May have** (a cautious guess): _Ze kan de bus gemist hebben_, or more tentatively _Ze zou de bus gemist kunnen hebben_. Negative: _Dat kan ze niet gezegd hebben_ (She can't have said that).
- **Should have** (regret or criticism): _Je had het eerder moeten zeggen._ With a plural subject: _We hadden het eerder moeten zeggen._
- **Could have** (an unrealized possibility): _Het had erger kunnen zijn._
- **Word order**: in a guess, participle and helper can swap (_gemist hebben_ or _hebben gemist_). After _had_ or _hadden_, the modal normally comes first (_moeten zeggen_). In a subordinate clause (after _dat_, _omdat_ and the like), the finite verb (the one that agrees with the subject) joins the group at the end: _dat ze de bus gemist moet hebben_, _dat je het had moeten zeggen_.

## Examples

| Sanne reageert niet in de groepsapp, dus ze **moet** het bericht **gemist hebben**. | Sanne isn't reacting in the group chat, so she must have missed the message. |
| Joris komt niet opdagen. Hij **moet** het **vergeten zijn**. | Joris isn't turning up. He must have forgotten. |
| De straat is kletsnat, dus het **moet** vannacht flink **geregend hebben**. | The street is soaking wet, so it must have rained hard last night. |
| Je **had** het eerder **moeten zeggen**, dan hadden we iets anders gepland. | You should have said so sooner, then we would have planned something else. |
| Carlos en Mei **hadden** hun fietsen bij het station op slot **moeten zetten**: nu zijn ze allebei gestolen. | Carlos and Mei should have locked their bikes at the station: now both have been stolen. |
| Je **had** me ook even **kunnen appen**. | You could at least have sent me a message. |
| Ahmed is van zijn fiets gevallen, maar het **had** veel erger **kunnen aflopen**. | Ahmed fell off his bike, but it could have ended much worse. |
| Heeft de bezorger het pakketje bij de buren afgegeven? Dat **zou kunnen**. | Did the courier leave the parcel with the neighbours? Could be. |
| Fatima vindt dat de huisarts haar veel eerder **had moeten doorverwijzen**. | Fatima thinks the GP should have referred her much sooner. |
| Je **had** het **moeten zien**: op Yara's verjaardag stond Bas op tafel te dansen. | You should have seen it: at Yara's birthday, Bas was dancing on the table. |

## Why it works this way

Ask when the thinking happens. You stand on the platform now and draw a conclusion about earlier, so the modal stays in the present and the past sits at the end (_gemist hebben_). English "must have" works the same way, so this half tends to feel friendly.

A missed chance is different: the moment of choice lies in the past, and it went the other way. Dutch marks that with _had_ or _hadden_, the same unreal past as in _Als ik het had geweten_ (see [If only](https://www.dutchfluency.com/grammar/unreal-past)). The modal then stays an infinitive instead of becoming a participle, so two infinitives stand in a row: a double infinitive. The ordinary perfect does this too: _Ik heb moeten werken_, never _Ik heb gemoeten werken_ (more in [verb clusters](https://www.dutchfluency.com/grammar/verb-clusters)).

On their own, these two differ by one small verb:

- _Ik heb moeten werken._ I had to work, and I did.
- _Ik had moeten werken._ On its own, this normally means: I should have worked, but I didn't.

In a story told in the past, context can turn _had moeten_ into a plain past perfect: _Hij was kapot, want hij had de hele dag moeten werken_ (he had had to work all day, and did).

Remember: find where the past sits. At the end (_gemist hebben_), you are a detective reading clues. Up front on _had_ or _hadden_, you are looking back at a road not taken.

## Watch out

- Not: _Ze moet hebben de bus gemist._ Say: _Ze moet de bus gemist hebben._ (the object comes before the verbs at the end, unlike English)
- Not: _Hij moet al naar huis gegaan hebben._ Say: _Hij moet al naar huis gegaan zijn._ (English always says have, but _gaan_ takes _zijn_ in the perfect)
- Not: _Je had moeten het eerder zeggen._ Say: _Je had het eerder moeten zeggen._ (only _had_ stays in second place; both infinitives close the sentence)
- Not: _Ik had het gemoeten zeggen._ Say: _Ik had het moeten zeggen._ (next to another verb, the modal stays _moeten_, with no _ge-_)
- Not: _Dat had ik moeten geweten._ Say: _Dat had ik moeten weten._ (English says known, but Dutch needs the infinitive _weten_)

## Quick check

1. Choose _hebben_ or _zijn_: _Het is zo stil bij de buren. Ze moeten al op vakantie ... vertrokken._
2. Choose _heeft_ or _had_: _Emma kwam te laat bij de huisarts, want ze vertrok pas om half negen. Ze ... eigenlijk om acht uur moeten vertrekken._
3. Fix the sentence: _Je had moeten mij waarschuwen._
4. Sanne asks: _Is de vergadering naar donderdag verplaatst?_ You are not sure, but it is possible. Choose _kunnen_ or _moeten_: _Dat zou ..._

## Answers

1. _zijn_: _vertrekken_ takes _zijn_ in the perfect (_ze zijn vertrokken_); here the helper simply comes before the participle.
2. _had_: leaving at eight never happened; _heeft moeten_ would mean she really had to leave then and did.
3. _Je had mij moeten waarschuwen._ Only _had_ stays in second place; the object goes before the verbs at the end.
4. _kunnen_: _Dat zou kunnen_ means "that's possible"; _Dat zou moeten_ means "that's supposed to be the case".

## Use it today

Pick one small thing that went wrong this week, like a forgotten umbrella or a missed bus. Say one detective guess (_Ik moet hem in de trein hebben laten liggen_), one regret (_Ik had eerder moeten vertrekken_) and one honest maybe (_Het zou kunnen dat ..._) out loud.

## Questions learners ask

**How do you say "should have" in Dutch?**

Use had (or hadden with a plural subject) plus moeten plus an infinitive, with both infinitives at the end: "Je had het eerder moeten zeggen" means "You should have said it sooner." The modal stays moeten and does not become gemoeten in this structure.

**What is the difference between "moet hebben" and "had moeten" in Dutch?**

"Ze moet de trein gemist hebben" is a confident guess that something happened (she must have missed the train). "Ze had de trein moeten nemen" normally says that something should have happened but did not (she should have taken the train).

**What does "dat zou kunnen" mean in Dutch?**

It means "that's possible" or "could be": you accept an idea as possible without committing to it. It sounds a little more tentative than "dat kan", which can also mean "that's fine" or "that works".

From the Dutch Fluency Grammar: https://www.dutchfluency.com/grammar. Shared under CC BY-SA 4.0.
