Create a Streamlit application that contains an editable table for generating sales leads
To upload files, please first save the app
import streamlit as st
import pandas as pd
import numpy as np
st.title("Sales Leads Manager")
# Initialize the data in session state if it doesn't exist
if 'leads_data' not in st.session_state:
# Create initial sample data
st.session_state.leads_data = pd.DataFrame({
'Company': ['Acme Corp', 'TechStart Inc', 'Global Solutions'],
'Contact Name': ['John Smith', 'Sarah Johnson', 'Mike Wilson'],
'Email': ['john@acme.com', 'sarah@techstart.com', 'mike@globalsolutions.com'],
'Phone': ['555-0100', '555-0200', '555-0300'],
'Status': ['New', 'In Progress', 'Follow Up'],
'Notes': ['Initial contact made', 'Scheduled demo', 'Interested in product']
})
# Add new lead form
st.subheader("Add New Lead")
col1, col2 = st.columns(2)
with col1:
company = st.text_input("Company Name")
contact = st.text_input("Contact Name")
email = st.text_input("Email")
with col2:
phone = st.text_input("Phone")
status = st.selectbox("Status", ['New', 'In Progress', 'Follow Up', 'Closed'])
notes = st.text_input("Notes")
if st.button("Add Lead"):
new_lead = pd.DataFrame({
'Company': [company],
'Contact Name': [contact],
'Email': [email],
'Phone': [phone],
'Status': [status],
'Notes': [notes]
})
st.session_state.leads_data = pd.concat([st.session_state.leads_data, new_lead], ignore_index=True)
st.success("Lead added successfully!")
# Display and edit existing leads
st.subheader("Current Leads")
# Convert the dataframe to editable format
edited_df = st.data_editor(
st.session_state.leads_data,
num_rows="dynamic",
column_config={
"Status": st.column_config.SelectboxColumn(
"Status",
options=['New', 'In Progress', 'Follow Up', 'Closed'],
),
}
)
# Update the data in session state
st.session_state.leads_data = edited_df
# Display some basic statistics
st.subheader("Lead Statistics")
col1, col2, col3 = st.columns(3)
with col1:
st.metric("Total Leads", len(st.session_state.leads_data))
with col2:
new_leads = len(st.session_state.leads_data[st.session_state.leads_data['Status'] == 'New'])
st.metric("New Leads", new_leads)
with col3:
closed_leads = len(st.session_state.leads_data[st.session_state.leads_data['Status'] == 'Closed'])
st.metric("Closed Leads", closed_leads)
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?