Build an Operational App in Palantir Foundry

Ingest, transform, and surface order data in a Foundry Workshop app.

Introduction

30 Second Summary

Every company generates mountains of raw data from suppliers, customers, and internal systems. Turning that data into something a team can actually use to make decisions is one of the most in-demand skills in tech.

In this project, you will build an end-to-end data workflow in Palantir Foundry that takes messy supplier order data, cleans and enriches it with Python code, and surfaces it in a polished application where anyone on the team can filter, visualize, and act on orders.

What You'll Build

Picture opening a browser, clicking into your own application, filtering down to priority orders, and assigning one to a teammate with a single click.

By the end of this project, you'll have:

  • A working data pipeline that ingests raw CSV files from two suppliers and produces a single clean dataset you can trace back to its sources through full lineage tracking.
  • Custom PySpark transforms you wrote in a web-based IDE that add calculated fields like order totals and priority flags to your data, proving code-based data engineering skills.
  • An interactive Workshop application with charts, filters, and an Action button that lets you assign orders to team members and see that decision captured directly back into the data.
  • Secret Mission: Build a revenue-per-customer aggregation with PySpark and visualize it as a new chart in your app.

Are there any prerequisites?

No local software installation is needed. All work happens in the browser within the Foundry platform.

You will need Python and SQL familiarity to follow along with the code transform steps. Signing up for the free Developer Tier requires a government-issued ID for identity verification, and is available in supported countries (check the signup page for the current list).

Before We Start

Before We Start...

Before we dive in, let's lock in what you're about to build and why it matters.

You're going to build a complete end-to-end workflow in Palantir Foundry. From raw data ingestion through transformation and Ontology modeling to a published operational application. Taking a moment to commit to this goal now helps you stay focused through each step.

Set Up Your Foundry Environment

To build a complete data workflow, you first need access to the platform where everything happens. Palantir Foundry is the enterprise data platform you will use for ingestion, transformation, modelling, and application building.

In this step, you will sign up for the free Developer Tier, create an organized project and folder structure, and upload the raw order data that the rest of this project builds on.

In this step, get ready to:
  • Sign up for a free Palantir Foundry Developer Tier account.
  • Create a project and folder to organize your workflow resources.
  • Upload sample order datasets into your workspace.
Sign up for Palantir Foundry Developer Tier

The Developer Tier gives you free access to the full Foundry platform for learning and building. Signing up requires identity verification, so you will need a government-issued ID handy.

  • Open your browser and navigate to build.palantir.com.
  • Click Sign up for a free developer tier account.
  • Complete the registration form with your details.
  • When prompted for identity verification (KYC), provide a government-issued ID such as a driver's license or passport.
  • Submit your application and wait for approval.

How long does verification take?

Verification can take anywhere from a few minutes to a few hours. If you are not approved instantly, check your email for a confirmation later. You must be in a supported country to sign up. At the time of writing, supported countries include Canada, India, United Kingdom, and United States. Check the signup page for the current list.

  • Once approved, log in to Foundry using the credentials you created during signup.

You should see the Foundry home screen with a navigation sidebar on the left. This confirms your account is active and ready to use.

Can't access the signup page?

Make sure you are in one of the supported countries listed on the signup page. If you are outside those countries, you will be placed on a waitlist. Try clearing your browser cache or using a different browser if the page fails to load.

Having trouble with signup?

Create your project and folder

Foundry organizes resources into Projects and folders. You will create a Learning Project to hold all your work, then a specific folder for this workflow.

  • In the Foundry navigation sidebar, click Files.
  • Click Projects in the top bar.
  • Click + New Project in the top right.
  • Select your organization's space from the dropdown (Developer Tier enrollments typically have one default space).
  • Name your project Learning Project.
  • Add a short description such as "Training projects for Palantir Foundry".
  • Click Create project.

Your new project appears in the Projects list. Now create a folder inside it to hold all resources for this specific workflow.

  • Click into Learning Project to open it.
  • Click + New and select Folder.
  • Name the folder Order Management Workflow.
  • Click into the new folder to open it.

You should now see an empty folder view. This confirms your workspace structure is ready for data and resources.

Don't see the + New Project button?

If you do not have permissions to create a project, your Developer Tier enrollment may still be provisioning. Wait a few minutes and refresh the page. If the issue persists, check the Palantir Developer Community for help.

Help me troubleshoot project creation in Foundry.

Upload sample order data

Your folder needs raw data to work with. You will upload three CSV files: two supplier order files and one customer list.

Where do the sample files come from?

Your Foundry Developer Tier enrollment includes training datasets. Look for sample CSV files in the Palantir Learn course materials, or deploy them from the Foundry Marketplace if available in your enrollment. If you do not see pre-made files, you can create simple CSV files with columns like order_id, customer_id, product, quantity, and unit_price.

  • Make sure you are inside the Order Management Workflow folder.
  • Click + New.
  • Click Upload files....
  • Click choose from your computer and select all three CSV files (two supplier order files and the customer list).
  • Toggle Upload as individual structured datasets so each file becomes its own dataset.
  • Click Upload.

What does uploading as structured datasets do?

When you toggle this option, Foundry treats each CSV as a separate tabular dataset with its own schema. This means Foundry automatically infers column names and types from your CSV headers, making the data immediately queryable and transformable in later steps.

Before you check the result, what do you expect to see in your folder after the upload completes?

  • Click on any of the uploaded datasets to open it.
  • Confirm the dataset preview shows rows and columns from your CSV data.
  • Navigate back to the Order Management Workflow folder and confirm all three datasets are listed.

You should see three datasets in your folder, each showing a tabular preview with the columns and rows from your CSV files. This confirms your raw data is ingested and ready for transformation.

What is data lineage?

Foundry automatically tracks how every dataset was produced. Even at this early stage, your uploaded datasets have a lineage record showing they were manually uploaded. As you build pipelines and transforms in later steps, the lineage graph grows to show the full chain from raw input to final output.

Datasets not showing a preview?

Make sure your CSV files have a header row as the first line. Foundry uses the header to infer column names. If the preview shows raw text instead of columns, click on the dataset and check whether a schema was detected. You may need to click Apply a schema if Foundry did not auto-detect your CSV format.

Help me fix my dataset preview.

Your environment is ready and loaded with data. Next up, you will use Pipeline Builder to clean, join, and unify these raw supplier datasets into a single standardized output.

Transform Data with Pipeline Builder

Your datasets are uploaded and ready to use. Now you need to turn that raw data into something useful for analysis.

The problem is that each supplier formats their data differently. Column names don't match, data types are inconsistent, and the information is scattered across three separate files. You need a single, clean dataset that combines everything.

In this step, get ready to:
  • Create a Pipeline Builder pipeline that reads all three input datasets.
  • Rename columns, cast data types, and filter out incomplete rows.
  • Join and union the data into a single clean output dataset.
Create a new pipeline and add your input datasets

Pipeline Builder is Foundry's visual tool for building data integration pipelines. You describe transforms using a graph-and-form interface, and the backend writes the underlying code for you.

  • Navigate to your Order Management Workflow folder inside Learning Project.
  • Click New, then select Pipeline to create a new pipeline.
  • Name the pipeline Clean Orders Pipeline.

The Pipeline Builder graph opens. This is where you add datasets, configure transforms, and define outputs.

  • Click Add Foundry data in the center of the graph.
  • Search for and select your Supplier 1 Orders dataset, then click Add to selection.
  • Repeat for Supplier 2 Orders and Customer List.
  • Click Add data to place all three datasets on your graph.

You should see three dataset nodes on your pipeline graph, each representing one of your input files.

What is Pipeline Builder?

Pipeline Builder is Foundry's no-code pipelining tool. It uses pre-built Spark modules under the hood, so you get the power of distributed data processing through a point-and-click interface.

The workflow follows a simple pattern: add inputs, apply transforms (rename, cast, join, union, filter), preview results, then deliver outputs.

Clean and standardize the supplier data

Each supplier uses different column names and data formats. You need to rename columns so both suppliers use the same names, and cast data types so dates and amounts are stored correctly.

  • Select the Supplier 1 Orders node on the graph.
  • Click Transform to open the transform configuration.
  • Add a Rename columns transform to standardize column names (for example, renaming a supplier-specific column to a consistent name like order_date or customer_id).
  • Add a Cast expression to convert order date columns to the Date type and amount columns to the Decimal type.
  • Add a Filter transform to remove any rows where required fields (like order ID or customer ID) are null.
  • Click Apply to save the transform.

You should see the transform node appear between your input dataset and the next step in your graph.

  • Repeat the same process for Supplier 2 Orders: rename its columns to match the same names you used for Supplier 1, cast the same data types, and filter out incomplete rows.

Why rename columns before joining?

A union requires that both inputs share the same column names and schema. If Supplier 1 calls a field orderDate and Supplier 2 calls it date_ordered, the union fails with a missing columns error.

Renaming both to a consistent name like order_date solves this before you combine the data.

Preview your transforms

Click any transform node on the graph to preview the output at that stage. This helps you catch mistakes (wrong column name, unexpected nulls) before running the full pipeline.

Join with customer data, union the suppliers, and run the pipeline

Now that both supplier datasets have consistent schemas, you need to enrich them with customer information and combine them into one unified table.

  • Select the cleaned Supplier 1 transform node and click Join.
  • Select the Customer List node as the Right dataset.
  • Click Start to configure the join.
  • Set the join type to Left and set the match condition to the customer identifier column that both datasets share.
  • Click Apply to add the join to your graph.
  • Repeat the same join for the cleaned Supplier 2 dataset with the Customer List.

You now have two joined outputs on your graph, one per supplier, each enriched with customer information.

  • Select the first joined dataset node and click Union.
  • Select the second joined dataset node as the Right dataset.
  • Click Start, then Create union to preview the combined result.
  • Click Apply to add the union to your graph.

What does the union do?

A union stacks all rows from both supplier datasets into one table. Because you renamed the columns to match earlier, the schemas align and the union succeeds.

  • Select the union output node and expand the outputs sidebar by clicking the expand icon on the right side of the graph.
  • Click Add output to create a dataset output.
  • Set the output location to your Order Management Workflow folder and name the output dataset Clean Orders.

Before you run the pipeline, what do you expect to see in the output? Think about how many rows you expect and what columns should appear.

  • Click Deploy in the top toolbar to deliver your pipeline logic.
  • When prompted, select the Clean Orders output and confirm the build.
  • Wait for the build to complete. A blue banner appears at the top of your graph when the deployment succeeds.

Once the build finishes, right-click the Clean Orders output node and select Open to preview the dataset.

You should see a single unified table combining orders from both suppliers, matched with customer information, with consistent column names and data types.

What is Data Lineage?

Every dataset in Foundry maintains a record of how it was produced. This is called Data Lineage. Navigate to the lineage view of your Clean Orders dataset to see a graph showing how all three input datasets connect through your pipeline to produce this output.

Lineage tracking means you can always trace any row back to its original source, which is critical for data governance and debugging.

Pipeline build failed?

Check the error details in the build status. Common causes include:

  • Schema mismatch on the union. Ensure both supplier datasets have identical column names and types after your rename and cast transforms.
  • Missing join key. Verify that the customer identifier column exists in both the supplier dataset and the Customer List.
  • Output path conflict. Make sure Clean Orders is saved to your Order Management Workflow folder, not a personal folder.

Need help debugging your pipeline?

Your raw supplier data is now a single, clean dataset ready for analysis. Next up, you will write PySpark code to add calculated business logic that Pipeline Builder alone cannot express.

Enrich Data with PySpark in Code Repositories

Your Clean Orders pipeline does a great job of standardizing and joining the raw supplier data. But now you need custom business logic that Pipeline Builder cannot express.

Calculating order totals and flagging high-value orders as priority requires code. Code Repositories give you a full PySpark environment with version control, which is exactly what production data teams use to add calculated fields and business rules.

In this step, get ready to:
  • Create a Code Repository with a Python Transforms file.
  • Write a PySpark transform that adds calculated columns to your data.
  • Build the transform and verify the enriched output in Data Lineage.
Create the Order Enrichment repository

A Code Repository is Foundry's web-based IDE backed by Git. You will create one specifically for your enrichment logic.

  • Navigate to your Order Management Workflow folder.
  • Click + New in the upper right.
  • Select Code repository.
  • Name it Order Enrichment.
  • Select Python under the language template dropdown.
  • Click Initialize repository.

The repository opens in Foundry's web-based IDE. You should see a starter file structure with a transforms directory in the left sidebar.

What is a Code Repository?

Code Repositories is a web-based integrated development environment (IDE) for writing and collaborating on production-ready code in Foundry. It wraps a full Git repository with branching, committing, and code review built in.

Unlike Pipeline Builder (no-code), Code Repositories let you write arbitrary Python or Java logic. This is what data engineering teams use for anything beyond basic cleaning and joins.

Don't see the Code repository option?

Make sure you are inside your Order Management Workflow folder when you click + New. The option only appears when you have the correct permissions in your project. Help me find the Code repository option in Foundry.

Write the PySpark enrichment transform

Foundry's template wizard may open automatically when the repository initializes. You can use the wizard or manually create a new file. Either way, you need a Python file in the transforms directory that reads your Clean Orders dataset and outputs an enriched version.

  • In the Files sidebar, navigate to the transforms directory.
  • Create a new file called order_enrichment.py (or rename the auto-generated example file).
  • Replace any boilerplate content with the following PySpark transform code:
from transforms.api import transform_df, Input, Output
from pyspark.sql import functions as F


@transform_df(
    Output('/your-path/Order Management Workflow/Enriched Orders'),
    clean_orders=Input('/your-path/Order Management Workflow/Clean Orders'),
)
def compute(clean_orders):
    # Calculate order total from unit price and quantity
    enriched = clean_orders.withColumn(
        'order_total',
        F.col('unit_price') * F.col('quantity')
    )

    # Flag high-value orders as priority
    enriched = enriched.withColumn(
        'is_priority',
        F.col('order_total') > 500
    )

    return enriched

What does this code do?

  • from transforms.api import transform_df, Input, Output imports Foundry's transform decorator and dataset references.
  • from pyspark.sql import functions as F gives you access to PySpark's column operations.
  • @transform_df registers this function as a DataFrame transform. It takes a single Output (where the result goes) and named Input keyword arguments (where the data comes from).
  • withColumn('order_total', ...) creates a new column by multiplying unit_price by quantity.
  • withColumn('is_priority', F.col('order_total') > 500) creates a boolean column that is True when the order total exceeds 500.

Setting the Input and Output paths

In the Foundry IDE, you can browse for your datasets instead of typing paths manually. Click the dataset path field in the template wizard, or use the resource picker to select your Clean Orders dataset as input and set the output to a new dataset called Enriched Orders inside your Order Management Workflow folder.

  • Save the file.

Seeing a validation error about resources?

Input and output resources must be contained within the same project as the repository. Make sure your Clean Orders dataset and the output path both live inside your Learning Project. Help me fix a resource validation error in my Code Repository.

Commit, build, and verify the enriched dataset

Your transform code is saved but not yet running. You need to commit the code to the repository and then trigger a build to execute it.

  • Click Commit in the repository toolbar to save your changes to version control.
  • Click Build to run the transform.

What does Build do?

Build commits your code, runs automatic checks, and executes the transform against your input dataset. Foundry resolves the Python dependencies, spins up a Spark cluster, and writes the output DataFrame to the specified output dataset.

  • Wait for the build to complete. The status indicator changes to green when successful.

Before you look at the output, predict what columns you expect to see in the resulting dataset.

  • Once the build succeeds, navigate to the Enriched Orders dataset in your Order Management Workflow folder.
  • Click Preview to inspect the data.

You should see all the original columns from Clean Orders, plus two new ones: order_total (a numeric value for each row) and is_priority (true or false for each row).

  • Open Data Lineage on the Enriched Orders dataset to confirm lineage is tracked.

The lineage graph now shows Clean Orders feeding into your Code Repository transform, which outputs Enriched Orders. This end-to-end lineage means Foundry knows exactly how every dataset was produced.

Build failed or no new columns?

Check that unit_price and quantity match the exact column names in your Clean Orders dataset. Column names are case-sensitive. Open the Clean Orders preview to verify the exact names, then update your code if needed.

Also confirm the Input path in your @transform_df decorator points to the correct Clean Orders dataset (use the resource picker to select it). Help me debug a failed build in my Foundry Code Repository.

Why code instead of Pipeline Builder?

Pipeline Builder handles standard operations like renames, casts, filters, and joins with a drag-and-drop interface. But conditional logic, custom calculations, and anything that requires arbitrary expressions are where code shines.

Code Repositories also give you version control. Every change is committed, reviewable, and rollback-ready. This is the workflow production data teams follow.

Your data now has real business logic baked in. Next up, you will turn these enriched rows into meaningful business objects by building the Ontology.

Build the Ontology

Your enriched dataset now has calculated fields like order totals and priority flags. But it is still just rows and columns in a table.

Business users do not query datasets directly. They need to interact with meaningful concepts like "orders" and "customers." The Ontology is Foundry's layer that turns raw data into business objects that anyone can browse, search, and act on.

In this step, get ready to:
  • Create a new Object Type in Ontology Manager backed by your enriched dataset.
  • Map dataset columns to human-readable property names.
  • Verify your Order objects are browsable and searchable in Object Explorer.
Create the Order Object Type

The Ontology Manager is where you define Object Types. An Object Type is the schema that tells Foundry how to interpret your dataset rows as real-world things.

  • Open Ontology Manager from the Foundry navigation menu.
  • Click New in the top right corner, then select Create object type.
  • A guided helper will appear. Enter Order as the Object Type name.
  • In the backing datasource step, search for and select your Enriched Orders dataset (the output of your Code Repository transform).
  • In the primary key step, select the order ID column as the primary key.

What is an Object Type?

An Object Type is a schema definition for a real-world entity. Each row in your backing dataset becomes one object instance. The Object Type acts as a template that says "every row in this dataset represents an Order."

The primary key uniquely identifies each object. For orders, this is the order ID column so Foundry can distinguish between individual orders.

You should now see the property configuration step of the guided helper, with your dataset columns listed.

Configure properties with human-readable names

When Foundry auto-maps your dataset columns, they appear with their raw column names. Business users should see friendly labels instead.

  • In the properties step of the helper, review the auto-mapped columns from your enriched dataset.
  • Rename customer_name to Customer Name.
  • Rename order_total to Order Total.
  • Rename is_priority to Priority.
  • Rename any other columns you want displayed (supplier name, order date, quantity) to readable labels.
  • Mark properties that users will search by (like Customer Name) as searchable in the property settings.

What does marking a property as searchable do?

Searchable properties are indexed so that Object Explorer's search bar can find objects by those values. If Customer Name is searchable, a user can type a customer name and immediately find matching orders.

  • In the save location step, select your Learning Project as the project to save the Object Type to.
  • Click Create to stage your changes.
  • Back in Ontology Manager, click Save in the upper right corner to commit the Object Type to the Ontology.

Create stages, Save commits

Clicking Create in the helper only stages your changes. They are not live until you click Save in Ontology Manager. If you navigate away without saving, your Object Type will not be committed.

Verify your Order objects in Object Explorer

Before you open Object Explorer, take a moment to predict. What do you expect to see when you search for one of your orders?

  • Open Object Explorer from the Foundry navigation menu.
  • In the search bar, type a customer name that you know exists in your data.
  • Select an Order object from the results.

You should see the object's properties displayed with your human-readable names: Customer Name, Order Total, Priority, and the other properties you configured.

  • Click on additional Order objects to browse through your data and confirm properties are populated correctly.

Not seeing your Order objects?

If Object Explorer does not show your Order Object Type, return to Ontology Manager and check that you clicked Save after clicking Create. Staged changes are not visible until saved.

If properties show as empty, verify that your Enriched Orders dataset has completed its build successfully. The Object Type pulls data from the latest build of its backing dataset.

Why isn't my Order Object Type appearing in Object Explorer?

Your data is no longer trapped in tables. It is now a collection of Order objects that anyone can search and browse. Next up, you will build a Workshop application that turns these objects into an interactive operational tool with charts, filters, and actions.

Build a Workshop Application with Actions

Your Order objects are now browsable in Object Explorer with meaningful properties like Customer Name, Order Total, and Priority. That is useful for data exploration, but it is not an operational tool.

Operators need an actual application where they can filter orders, spot patterns in charts, and take action directly from the interface. In this step, you will build that application using Workshop, Foundry's no-code application builder that sits on top of the Ontology. You will also configure an Action that lets users write decisions back into the data, completing the loop from raw data to operational decision.

In this step, get ready to:
  • Create a Workshop module with an Object Table, filters, and a details panel.
  • Add Pie Chart and Bar Chart visualization widgets to surface order patterns.
  • Configure an Assign Order Action and wire it to a button in your Workshop app.
Create the Workshop module with table and filters

Workshop modules are created inside a Project or folder and inherit its permissions. You will add an Object Table backed by your Order objects, then layer on filters so users can narrow down exactly what they need.

  • Navigate to your Order Management Workflow folder in Foundry.
  • Click New in the top right, then select Workshop module.
  • Name the module Order Management App.
  • In the empty section that appears, click Add widget and select Object table.
  • In the configuration panel on the right, under Object set, click the dropdown and select + New object set variable.
  • In the variable definition popover, click Select starting object set and choose your Order object type.
  • Under Column Configuration, click Add all properties to populate the table with all Order properties.

You should see your Order data displayed in a table with columns for Customer Name, Order Total, Priority, and any other properties you configured.

  • Now add a Filter List widget. Click Add widget in a section to the left of your Object Table, then select Filter list.
  • In the Filter List configuration panel, set its Object set to a new object set variable pointing to your Order object type.
  • Under Filters Configuration, click + Add filter and add filters for Priority and Customer Name.
  • Toggle on Allow users to add and remove filters at the bottom of the filter configuration.
  • Connect the Filter List output to your Object Table. Select the Object Table widget, then in its Object set configuration, choose the filter output variable from the Filter List widget so that filter selections apply to the table.
  • Test the filter by selecting a Priority value. The Object Table should update to show only matching orders.

What is a Filter List widget?

The Filter List widget visualizes a summary of your object data and lets users filter within it. It outputs an object set filter variable that you wire into downstream widgets like the Object Table.

You must create a separate object set variable to back the Filter List so the filter does not limit its own base object set.

  • Add a details panel. Click Add widget in a section to the right and select Object view or Object details widget.
  • Wire it to the Object Table's active object output so that clicking a row shows the selected order's full properties.
  • Click a row in the Object Table. The details panel on the right should display the full properties of that selected order (Customer Name, Order Total, Priority).

Table not showing any data?

Make sure you selected the correct Order object type when creating the object set variable. If the table is empty, confirm your Order Object Type is synced in Ontology Manager and has data by checking Object Explorer.

If filters do not affect the table, confirm you wired the Filter List's filter output variable into the Object Table's Object set configuration. Help me connect my Filter List output to the Object Table

Add visualization widgets

Charts help users spot patterns instantly. You will add a Pie Chart showing order distribution by supplier and a Bar Chart showing total order value by customer.

  • At the top of your module layout, add a new section for charts.
  • Click Add widget and search for a chart widget (such as Chart: XY or Chart: Pie).
  • Configure the Pie Chart to show order distribution by supplier. Set the object set to your Order objects, then configure the grouping on the supplier property.
  • Add a second chart widget for the Bar Chart. Configure it to show total order value by customer, using the Order Total property for the value axis and Customer Name for the category axis.
  • Rearrange your layout so the charts appear at the top and the filterable table sits below them.
  • Save your module. Preview it to confirm both charts render with data.

You should see a Pie Chart sliced by supplier and a Bar Chart showing order value by customer. The Object Table below should still respond to filter selections.

Why charts on top?

Placing visualizations at the top gives users an at-a-glance summary before they drill into individual rows. This is a common dashboard pattern in operational applications.

Charts showing no data?

Verify the chart's object set input points to the same Order object set (or its filtered output) that backs your table. If the grouping property is blank, check that your Order Object Type has a supplier-related property mapped in Ontology Manager.

Help me configure charts in my Workshop module

Configure an Action and publish your module

Right now your Workshop app is read-only. To close the loop from insight to action, you need to let users assign orders to team members directly from the app. This requires enabling edits on the Object Type and creating an Action in Ontology Manager.

  • Open Ontology Manager from the left navigation panel.
  • Find your Order Object Type and open its configuration.
  • Enable edits (writeback) on the Order Object Type. This allows Actions to modify its properties.
  • Add a new property called assigned_to (string type) to your Order Object Type. This property will store the team member name.
  • Save the Object Type changes.

What are Actions in Foundry?

An Action is a single transaction that changes properties on one or more objects based on user-defined logic. Actions enable users to handle data while thinking about objectives (like assigning an order) instead of individual property edits.

Any changes made through an Action are committed to the Ontology and reflected across all applications that reference the same objects.

  • While still on your Order Object Type in Ontology Manager, navigate to the Action types section and click Create new.
  • Enter Assign Order as the display name.
  • Select Modify under the Change object(s) option.
  • Choose your Order object type from the dropdown, then select the assigned_to property as the property this Action modifies.
  • Review the Rules tab to confirm the modification rule is configured correctly, then save the Action.

Your Action is now defined. Next, you will wire it into your Workshop module so users can trigger it from the app.

  • Return to your Order Management App Workshop module.
  • In the details panel section, click Add widget and add a Button Group widget.
  • Label the button Assign Order.
  • In the On click configuration, select Select an action and choose the Assign Order action you just created.
  • For the Parameter defaults, set the Order parameter to the Object Table's active object variable so the action targets the currently selected order.
  • Leave the assigned_to parameter with no default so users type the team member name when they trigger the action.
  • Save and publish your Workshop module by clicking Publish.

Why use a Button Group widget?

Workshop exposes Actions to users through widgets like the Button Group. When a user clicks the button, an action form appears where they can fill in the required parameters (like the team member name) and submit the change.

Before you test the action, what do you think will happen to the Order object when you submit the assignment?

  • Open your published module (switch from Edit mode to View mode if needed).
  • Use the Priority filter to show only priority orders.
  • Confirm the Pie Chart still renders order distribution by supplier.
  • Select an order from the table.
  • Click the Assign Order button in the details panel.
  • In the action form that appears, enter a team member name (e.g. Alice) and click Submit.
  • Confirm the assignment persists by selecting the same order again and checking that the assigned_to property now shows the name you entered.

The assigned_to property on your selected Order object now displays the team member name you entered. This proves the full loop works: raw data flows through pipelines, becomes Ontology objects, and users can write decisions back through Actions.

Action button not appearing or submission failing?

Verify that edits are enabled on your Order Object Type in Ontology Manager. Without writeback enabled, Actions cannot modify properties.

If the action form does not pre-select the order, check that the Button Group's parameter default is wired to the Object Table's active object output variable.

Help me troubleshoot my Assign Order Action in Workshop

If you see a permissions error on submission, check the Action's submission criteria in Ontology Manager under the Security section and ensure your account satisfies those criteria.

Secret mission

Add Revenue Analytics with a PySpark Aggregation

Real-world Foundry workflows layer multiple transforms on top of each other. Can you independently create a second PySpark aggregation, model it as a new Object Type, and visualize revenue per customer in your Workshop app?

Clean Up Your Resources

Clean Up Your Resources

Decide whether to keep your resources running, pause them to come back later, or delete them entirely. This project runs entirely on the free Palantir Foundry Developer Tier, so there are no ongoing costs.

Resources you used:

  • Learning Project containing the Order Management Workflow folder.
  • Datasets: Supplier 1 Orders, Supplier 2 Orders, Customer List, Clean Orders, Enriched Orders, Customer Revenue Summary.
  • Clean Orders Pipeline.
  • Order Enrichment Code Repository.
  • Ontology Object Types: Order, Customer Summary.
  • Workshop Module: Order Management App.

Keep everything running

No action needed. Choose this if you want to keep your project for reference, demos, or to continue building on it.

  • Your resources persist in your Foundry enrollment indefinitely on the free Developer Tier.
  • You can return to your Learning Project at any time and pick up where you left off.
  • This is the recommended option so you can reference and demonstrate your work in interviews.
  • Your Palantir Foundry Developer Tier account remains active and free with no action required.

Pause - I'll come back to this later

There is nothing to pause. The Developer Tier has no running compute or background processes that incur costs while idle.

  • Your datasets, pipelines, code repositories, Ontology objects, and Workshop module remain stored in Foundry at no charge.
  • No builds or transforms run unless you manually trigger them.
  • Close your browser tab and return whenever you are ready.

Delete - I don't want to use this again

Remove all project resources from your Foundry enrollment. Your Developer Tier account remains active even after deletion.

  • Navigate to your home folder in Foundry where you see the Learning Project.
  • Right-click on the Learning Project and choose Move to trash. This moves all contents (the Order Management Workflow folder, datasets, pipeline, code repository, and Workshop module) to the Trash.
  • To permanently delete, open the Trash tab within the Project navigation panel.
  • Right-click on each item in the Trash and select Delete permanently. This action cannot be undone.

What about my Foundry account?

Your Developer Tier account remains active and free. There is no need to delete the account itself. You can create new projects in the future at any time.

Nice Work!

Nice Work!

You just built a complete operational application in Palantir Foundry, from raw CSV files all the way to a published app that captures real decisions. That is the full lifecycle that production data teams deliver every day.

You've learned how to:

  • Build a data pipeline with Pipeline Builder and write PySpark transforms in Code Repositories to clean, join, and enrich raw order data with calculated business logic.
  • Model transformed data as meaningful business objects using the Ontology, making rows and columns browsable as real-world Order objects in Object Explorer.
  • Create a published Workshop application with charts, tables, filters, and an Action that writes operational decisions back into the data.
  • Secret Mission: Added a multi-step analytical pipeline with a PySpark aggregation computing revenue per customer and visualized it as a new chart in your Workshop app.

Ready to quiz yourself?