# AMPscript lookups, rowsets and CloudPages writes

*Marketing Cloud Engagement Developer Study Guide · Programmatic Languages · Last updated November 3, 2026 · https://www.certifyforce.com/study-guide/marketing-cloud-engagement-developer/programmatic-languages/ampscript-lookups-rowsets-and-cloudpages-writes*

Lookup, LookupRows and LookupOrderedRows signatures and limits, walking rowsets with RowCount, Row, Field and For loops, the email versus CloudPages write functions, encrypted CloudPagesURL links, Smart Capture and custom preference pages, and recording unsubscribes with LogUnsubEvent.

- Certification: Salesforce Marketing Cloud Engagement Developer
- Exam section: Programmatic Languages
- Study guide: https://www.certifyforce.com/study-guide/marketing-cloud-engagement-developer

**Official exam objective:**

> Given a scenario, demonstrate knowledge of AMPscript and SSJS language syntax and functions.

## What the exam expects

- Choose Lookup(), LookupRows() or LookupOrderedRows() (and the CS variants) from what a message needs, and pass their arguments in order.
- Read loops over rowsets: RowCount(), Row(), Field(), `to` and `downto`, and single-column rowsets from strings.
- Pick the right data extension write for an email or a CloudPage and predict what it returns.
- Link to CloudPages with encrypted parameters and read them on the page.
- Build data forms and custom preference pages on CloudPages, and record an unsubscribe from code.
- Key terms: **rowset** (tabular data a lookup or builder function returns); **ordinal** (a column referred to by number); **columnValuePairs** (the count of search pairs an update or upsert matches on); **CloudPagesURL()** (a page link with an AES-GCM encrypted query string); **LogUnsubEvent** (the Execute call that unsubscribes a subscriber and logs an UnsubEvent).

## Key facts

| Fact | Detail | Source |
|---|---|---|
| Lookup() with several matches | Returns the first matching value | [Lookup()](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-lookup.html) |
| LookupRows() | Unordered, up to 2,000 rows, case-insensitive | [LookupRows()](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-lookup-rows.html) |
| LookupOrderedRows() numRows | Below 1 returns all rows, up to 2,000 | [LookupOrderedRows()](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-lookup-ordered-rows.html) |
| Row() position | The first row is row 1 | [Row()](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-row.html) |
| Field() missing column | Exception by default; `false` returns an empty string | [Field()](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-field.html) |
| `downto` | Counter decreases by one on each `Next` | [For Loops](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/guide/mc-ampscript-guide-language-basics-for-loops.html) |
| UpsertData() columnValuePairs | Counts search pairs; a mismatch raises an exception | [UpsertData()](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-upsert-data.html) |
| CloudPagesURL() | AES-GCM encrypted query string; reserved names such as MID and JID | [CloudPagesURL()](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-sites/mc-ampscript-reference-sites-cloud-pages-url.html) |
| Preference form guard | Save only when a submit-only field is present | [Custom Profile Center](https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/creating_a_custom_profile_center_using_ampscript_and_the_soap_api.html) |
| LogUnsubEvent without job context | No UnsubEvent; the subscriber is master unsubscribed | [LogUnsubEvent](https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/unsubscribing_and_logging_an_unsubevent_with_a_logunsubevent_execute_call.html) |
| LogUnsubEvent ListID | Subscriber or publication lists, not suppression lists | [LogUnsubEvent](https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/unsubscribing_and_logging_an_unsubevent_with_a_logunsubevent_execute_call.html) |
| Smart Capture in journeys | Multistep journeys only | [Smart Capture Form](https://help.salesforce.com/s/articleView?id=mktg.mc_cp_create_a_smart_capture_form_in_cloudpages.htm&type=5&language=en_US) |

## Check yourself

- What does LookupOrderedRows() return when no row matches the search values?
- How do you sort a LookupOrderedRows() rowset by two columns?
- When does LookupOrderedRows() return every matching row, up to 2,000?
- When does LogUnsubEvent master unsubscribe a subscriber instead of unsubscribing them from a list?
- Why does a For loop written with `downto` count backwards?

## Sources

- [LookupRows() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-lookup-rows.html)
- [LookupOrderedRows() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-lookup-ordered-rows.html)
- [Lookup() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-lookup.html)
- [Row() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-row.html)
- [Field() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-field.html)
- [RowCount() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-row-count.html)
- [For Loops (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/guide/mc-ampscript-guide-language-basics-for-loops.html)
- [BuildRowSetFromString() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-content/mc-ampscript-reference-content-build-rowset-from-string.html)
- [InsertData() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-insert-data.html)
- [UpsertData() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-upsert-data.html)
- [InsertDE() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-insert-de.html)
- [UpsertDE() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-upsert-de.html)
- [UpdateDE() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-data-extension/mc-ampscript-reference-data-extension-update-de.html)
- [CloudPagesURL() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-sites/mc-ampscript-reference-sites-cloud-pages-url.html)
- [RequestParameter() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-sites/mc-ampscript-reference-sites-request-parameter.html)
- [Create a Smart Capture Form](https://help.salesforce.com/s/articleView?id=mktg.mc_cp_create_a_smart_capture_form_in_cloudpages.htm&type=5&language=en_US)
- [Preference Management and Segmentation](https://help.salesforce.com/s/articleView?id=mktg.mktg_apps_email_best_practices_preference_management.htm&type=5&language=en_US)
- [Create a Custom Profile Center with AMPscript](https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/creating_a_custom_profile_center_using_ampscript_and_the_soap_api.html)
- [Unsubscribe and Log an UnsubEvent with a LogUnsubEvent Execute Call](https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/unsubscribing_and_logging_an_unsubevent_with_a_logunsubevent_execute_call.html)
- [InvokeExecute() (AMPscript)](https://developer.salesforce.com/docs/marketing/marketing-cloud-ampscript/references/mc-ampscript-api/mc-ampscript-reference-api-invoke-execute.html)
- [Profile Center for Marketing Cloud Engagement](https://help.salesforce.com/s/articleView?id=mktg.mc_es_profile_center.htm&type=5&language=en_US)
- [Preview the Subscription Center](https://help.salesforce.com/s/articleView?id=mktg.mc_es_preview_subscription_center.htm&type=5&language=en_US)

## About the full unit

The "Core concepts", "Exam traps" and "Worked scenario" sections of this unit, its 7 linked practice questions, and unlimited timed mock exams are included with the Marketing Cloud Engagement Developer pack (USD $19): https://www.certifyforce.com/practice-exams
